在函数中创建指向窗口小部件(wxTextCtrl)的指针

时间:2014-05-27 16:19:42

标签: c++ wxwidgets

我试图获得一个指向窗口小部件的指针(在代码中它名为 text )。但至少我只有这个

  

错误:没有匹配函数来调用'std :: basic_ostream :: basic_ostream(wxWindow *)'

我的代码: 的 gui.h

#include <wx/wx.h>

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 = 100;
const int ID_STA = 101;
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(wxWindow::FindWindowById(ID_TEX));  
    stream << "Connected" << std::endl;
}
/*
void Start()
{
    //Try to get a pointer to 'text'
    std::ostream stream(wxWindow::FindWindowById(ID_TEX));  
    stream << "Started" << std::endl;
}
*/

我希望有人可以帮助我。另一种解决方案是将作为全局。但是当我尝试在标题中获取流声明时,他说他不知道任何文本所以我将文本声明移到课外,我得到了多个声明错误......我想因为我在gui.cpp和main.h中包含了 gui.h 。 -Casisto

编辑: 我将功能更改为:

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

现在我没有收到错误或警告,但当我点击“Connect”-Button时,wxTextCtrl没有“输入”(我的意思是,那里只有“Hello”)

2 个答案:

答案 0 :(得分:0)

错误消息不适合您显示的代码,其中textwxTextCtrl,派生自std::streambuf,因此可用于构建关联的{ {1}},而不是std::ostream

如果你的代码应该如图所示工作,你必须没有向我们展示一切。

答案 1 :(得分:0)

初始错误必须来自Connect()的旧代码,因为wxWindow::FindWindowById()会返回wxWindow*

首先要尝试:将wxWCK::OnClickCon()更改为{ (*text) << "Connected\n"; }。这应该可行。

接下来,如果你确实需要void Connect(),请在不创建std::ostream的情况下再试一次(你真的不需要它);像{ (*(wxTextCtrl*)wxWindow::FindWindowById(ID_TEX)) << "Connected\n"; }这样的东西。 但是,这可能仍然不起作用,因此请ID_CON = wxID_HIGHEST + 1ID_STA = wxID_HIGHEST + 2等再试一次。 IIRC我已经看到过低值的ID引起好奇行为的案例。