Обработчик событий другого кадра не вызывается - 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()
};
Спасибо тем, кто сможет мне помочь с этой проблемой.