C++ 未调用另一个框架的事件处理程序-wxWidgets

C++ 未调用另一个框架的事件处理程序-wxWidgets,c++,eventhandler,C++,Eventhandler,大家好 我正在使用WxWIDGET开发C++程序,其中一个帧有一个名为“校准”按钮的按钮,用于使用跟踪条校准HSV值。当用户选择此按钮时,将出现一个实时视频、一个包含用于调整HSV值的轨迹栏的控制面板、一个表示HSV值校准变化的阈值图像,以及另一个包含名为“保存值”按钮的帧。当用户单击“保存值”按钮时,它会将在轨迹栏中设置的任何值保存到文本文件中 我的问题是,每当我单击该按钮时,它都不会执行它打算执行的操作,即在TXT文件中保存HSV值 以下是当用户选择校准按钮时负责创建附加帧的主代码 void

大家好

我正在使用WxWIDGET开发C++程序,其中一个帧有一个名为“校准”按钮的按钮,用于使用跟踪条校准HSV值。当用户选择此按钮时,将出现一个实时视频、一个包含用于调整HSV值的轨迹栏的控制面板、一个表示HSV值校准变化的阈值图像,以及另一个包含名为“保存值”按钮的帧。当用户单击“保存值”按钮时,它会将在轨迹栏中设置的任何值保存到文本文件中

我的问题是,每当我单击该按钮时,它都不会执行它打算执行的操作,即在TXT文件中保存HSV值

以下是当用户选择校准按钮时负责创建附加帧的主代码

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循环中,用户可以单击savevalues按钮,将HSV值保存在txtfile中

另一方面,单击包含“保存值”按钮的“校准”按钮后,这里是新创建的frame 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::OnSaveClick?文件没有写吗?是否已写入但包含错误的值?在某种程度上,CalibrationWindow::OnSaveClick似乎不起作用,因此未写入该文件。因此您知道调用了CalibrationWindow::OnSaveClick。好的myfile.is_open是否返回true?文件系统上是否存在该路径?您应该学习使用调试器来查看代码中实际执行的行。或者至少,添加一些wxMessageBox调用来查看穷人的调试器发生了什么。据我所知,您显示的代码没有问题。
    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()
};