Обработчик событий другого кадра не вызывается - wxWidgets

Добрый день всем,

Я работаю над программой на C++, используя wxWidgets где кадр имеет кнопку "Калибровать кнопку", которая используется для калибровки значений HSV с помощью трекбара. Когда пользователь выбирает эту кнопку, видео в реальном времени, панель управления, которая содержит панель треков для настройки значений HSV, пороговое изображение, которое представляет изменения в калибровке значений HSV, и другой кадр, который содержит кнопку с именем "SAVE VALUES" "появляется. Когда пользователь нажимает кнопку "Сохранить значения", он сохраняет все значения, заданные на трекбаре, в текстовый файл.

Моя проблема заключается в том, что всякий раз, когда я нажимаю эту кнопку, она не выполняет то, для чего она предназначена, то есть для сохранения значений HSV в txtfile.

Вот основной код, который отвечает за создание дополнительного кадра, когда пользователь выбирает кнопку калибровки.

void TemplateFrame::OncalibTrackerButtonClick(wxCommandEvent& event)
{

    **some code for initializing the live video feed, the trackbars, etc.**

     CalibrationWindow* calibWindow =  new CalibrationWindow(this);
     calibWindow->setHSVvalues(H_MIN,S_MIN,V_MIN,H_MAX,S_MAX,V_MAX);

     calibrationModeTracker = true;

     **the following code after this line would be a pseudocode of what I am doing once the button has been click already
     while(calibrationModeTracker){
         calibWindow->Show(); // shows the "SAVE VALUES" frame
         wxYield();

         read live feed video
         createTrackbars();

         show live feed video
         show threshold image

     }
}

Внутри цикла while пользователи смогут нажимать кнопку "SAVE VALUES", которая сохранит значения HSV в txtfile.

С другой стороны, вот функция обработчика событий вновь созданного фрейма (CalibrationWindow.cpp) после нажатия кнопки "Калибровать", которая содержит кнопку "Сохранить значения"

    void CalibrationWindow::OnSaveClick(wxCommandEvent& event)
    {
      ofstream myfile;
      stringstream oss(stringstream::in | stringstream::out);
      string f;
      f = "//home//ianlangley//Desktop//Savefiles//HSVvalues_left.txt";
      f = f.append(oss.str());
      myfile.open(f.c_str());
      if (myfile.is_open()){

        myfile<<CalibrationWindow::getlow_H()<<"\n";
        myfile<<CalibrationWindow::getlow_S()<<"\n";
        myfile<<CalibrationWindow::getlow_V()<<"\n";
        myfile<<CalibrationWindow::gethigh_H()<<"\n";
        myfile<<CalibrationWindow::gethigh_S()<<"\n";
        myfile<<CalibrationWindow::gethigh_V();
        myfile.close();
     }
   }

Наконец, вот код внутри файла заголовка: CalibrationWindow.h

    class CalibrationWindow: public wxFrame
    {
       public:

       CalibrationWindow(wxWindow* parent,wxWindowID id=wxID_ANY);
       virtual ~CalibrationWindow();
       void setHSVvalues(int lowH,int lowS, int lowV,int highH,int highS, int highV);
       int getlow_H();
       int getlow_S();
       int getlow_V();

       int gethigh_H();
       int gethigh_S();
       int gethigh_V();

       //(*Declarations(CalibrationWindow)
       wxButton* LeftHandButton;
       wxButton* RightHandButton;
       //*)

       protected:

        //(*Identifiers(CalibrationWindow)
        static const long ID_BUTTON2;
        static const long ID_BUTTON1;
        //*)

        private:
        int lowH,lowS,lowV,highH,highS,highV;
        //(*Handlers(CalibrationWindow)
        void OnRightHandButtonClick(wxCommandEvent& event);
        void OnLeftHandButtonClick(wxCommandEvent& event);
        //*)

        DECLARE_EVENT_TABLE()
};

Спасибо тем, кто сможет мне помочь с этой проблемой.

0 ответов

Другие вопросы по тегам