用codeblocks编译wxwidget项目在Windows编译运行无法实时获取数据,如何解决?

用codeblocks编译wxwidget项目,自绘了一个滑动条,想在main.cpp里获取实时数据实现相关功能,试过用wxEVT_SCROLL_THUMBTRACK绑定事件没有成功。
不知道如果想在main.cpp里实时获取自绘滑动条cpp里的数据应该怎么操作,希望大家能为我解答,谢谢!
main.cpp中相关代码:(r只能打出初始值0,无法实时获取)


        slider1 = new mywxSlider(top, wxColour(146,168,209), wxID_ANY);

        slider1 -> mslider -> bar_bg(barbg) -> pre_bg(prebg) -> hover_bg(hoverbg);
        slider1 -> Show();//滑动条显示
        s1->Add(slider1, 0, wxALL, 30);
        int r;
        slider1 -> mslider -> Update();
        slider1 -> mslider -> Refresh();
        r = slider1 -> mslider -> p1;
        cout << "r=" << r << endl;

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    首先,需要在mySlider类中添加一个新的事件,当滑动条数值改变时触发该事件。

    // 自定义事件
    wxDEFINE_EVENT(SLIDER_EVENT, wxCommandEvent);
    
    class mySlider : public wxControl {
    public:
        mySlider(wxWindow *parent, wxWindowID winid, int value, int minValue, int maxValue, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize);
        int GetValue() const {
            return m_value;
        }
        void SetValue(int value) {
            if (value < m_minValue) {
                value = m_minValue;
            }
            if (value > m_maxValue) {
                value = m_maxValue;
            }
            m_value = value;
            UpdateThumb();
            Refresh();
            // 触发自定义事件
            wxCommandEvent evt(SLIDER_EVENT, GetId());
            evt.SetInt(value);
            GetEventHandler()->AddPendingEvent(evt);
        }
        //...
    };
    

    然后在MyFrame类的构造函数中,将SLIDER_EVENT事件绑定到处理函数OnSlider中:

    MyFrame::MyFrame(const wxString& title)
        : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(450, 340))
    {
        //...
        Connect(GetId(), SLIDER_EVENT, wxCommandEventHandler(MyFrame::OnSlider), NULL, this);
        //...
    }
    

    最后,在OnSlider函数中处理滑动条的值变化,并做出相应的处理。

    void MyFrame::OnSlider(wxCommandEvent& event)
    {
        int value = event.GetInt(); // 获取滑动条的数值
        // TODO: 根据数值做出相应处理
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^