【问题标题】:wxButtonClick don't give a sign of being alife [closed]wx按钮点击不显示活着的迹象[关闭]
【发布时间】:2014-07-17 05:17:37
【问题描述】:

昨天我在Creating a pointer to a widget in a function发了一个问题,我编译了程序并尝试使用它,但是当我点击按钮时,没有任何反应。

也许,在某个地方知道我的失败在哪里,或者知道我的代码的一些改进,这会有所帮助。我的代码:

gui.h

#include <wx/wx.h>
#include <string>

class wxWCK : public wxFrame
{
public:
    wxWCK(const wxString& title);

    void OnClickCon(wxCommandEvent& event);
    void OnClickSta(wxCommandEvent& event);

private:
    wxButton *connect;
    wxButton *start;
    wxTextCtrl *text;
};

const int ID_CON = wxID_HIGHEST + 1;
const int ID_STA = wxID_HIGHEST + 2;
const int ID_MF0 = 102;
const int ID_TEX = 103;

void Connect();
void Start();

gui.cpp

#include "gui.h"

wxWCK::wxWCK(const wxString& title)
    : wxFrame(NULL, ID_MF0, title, wxDefaultPosition, wxSize(400,300))
{
    wxPanel *panel = new wxPanel(this, -1);

    wxBoxSizer *vbox  = new wxBoxSizer(wxVERTICAL);
    wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL);
    wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL);   

    //Outputwidget
    text = new wxTextCtrl(panel, ID_TEX, _T(""), 
        wxPoint(-1, -1), wxSize(1000, 1000), wxTE_MULTILINE);

    //redirecting stream to the outputwidget
    std::ostream stream(text);  
    stream << "Hello" << std::endl;

    connect = new wxButton(panel, ID_CON, _T("Connect"));
    start   = new wxButton(panel, ID_STA, _T("Start"));

    hbox1->Add(text);
    hbox2->Add(connect);
    hbox2->Add(start);

    vbox->Add(hbox1, 1, wxEXPAND);
    vbox->Add(hbox2, 0, wxALIGN_LEFT | wxRIGHT | wxBOTTOM, 10);

    panel->SetSizer(vbox);

    Connect(ID_CON, wxEVT_COMMAND_BUTTON_CLICKED,
        wxCommandEventHandler(wxWCK::OnClickCon));
    //Connect(ID_STA, wxEVT_COMMAND_BUTTON_CLICKED,
    //  wxCommandEventHandler(wxWCK::OnClickSta));
}

void wxWCK::OnClickCon(wxCommandEvent& WXUNUSED(event))
{   void Connect(); }

void wxWCK::OnClickSta(wxCommandEvent& WXUNUSED(event))
{   void Start();   }

void Connect()
{
    //Try to get a pointer to 'text'
    std::ostream stream((wxTextCtrl*) wxWindow::FindWindowById(ID_TEX));
    std::string con = "Connected";
    stream << con << std::endl;
}

void Start()
{
    //Try to get a pointer to 'text'
    std::ostream stream((wxTextCtrl*) wxWindow::FindWindowById(ID_TEX));
    std::string sta = "Started";
    stream << sta << std::endl;
}

我正在使用 wxWidgets 2.9.4、g++-Compiler 和 CodeLite 5.1

【问题讨论】:

标签: c++ wxwidgets


【解决方案1】:
void wxWCK::OnClickCon(wxCommandEvent& WXUNUSED(event))
{   void Connect(); }

替换为:

void wxWCK::OnClickCon(wxCommandEvent& WXUNUSED(event))
{   Connect(); }

如有必要,在OnClickCon 之前进行Connect 函数的前向声明。用同样的方法修复OnClickSta函数。

【讨论】:

  • 谢谢,你太棒了!我必须在 Ctor 中创建函数原型,以便 Onclick-Fct 知道调用函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
相关资源
最近更新 更多