我正在尝试使用wxTextCtrl为我的GUI应用程序创建一个输入框。 我已经制作了这个盒子但是当我试图从中取出输入文本时,它崩溃了,我无法弄清楚原因。
以下是代码:
main.cpp中:
int main(int argc, char** argv)
{
wxApp::SetInstance( new App() );
wxEntryStart(argc, argv);
wxTheApp->OnInit();
wxTheApp->OnRun();
wxTheApp->OnExit();
wxEntryCleanup();
return 0;
}
app.cpp:
bool App::OnInit()
{
wxString title = "Version: ";
title += APP_VERSION;
/* Create the frame for my app */
Frame *simple = new Frame(0, wxID_ANY, title, wxDefaultPosition, wxSize(287, 700)/*wxSize(287, 450)*/, (wxDEFAULT_FRAME_STYLE & ~(wxRESIZE_BORDER | wxMAXIMIZE_BOX)));
simple->Show(true);
return true;
}
frame.cpp:
Frame::Frame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style )
: wxFrame( parent, id, title, pos, size, style )
{
wxPanel *panel = new wxPanel(this, wxID_ANY);
input_text = new wxTextCtrl(this, wxID_ANY, "initial", wxPoint(10, 400), wxSize(250, 100));
wxString str = input_text->GetValue();
wxMessageBox(str);
}
它在 frame.cpp 上崩溃: wxString str = input_text-> GetValue();
我正在使用wxWidgets-3.0.0和Visual Studio 2012在Windows上进行编译。
这可能是非常简单的事情,但我刚开始使用wxWidgets而且我对它没有多少经验。
感谢。
答案 0 :(得分:2)
如果您刚开始使用wxWidgets,为什么不使用标准的初始化方法,即wxIMPLEMENT_APP宏?我不确定这是否能解释您的问题(如果您在调试器下运行程序并确定为什么完全它会崩溃,即向我们显示完整的堆栈跟踪),那将非常有用,但您肯定不会#39; t正确初始化库。
FWIW你还可以创建文本控件作为框架的子项,当你可能想要创建它作为面板的子项时,但这绝对与崩溃无关。
答案 1 :(得分:0)
在窗口显示之前,您正在Frames构造函数中调用GetValue()。我现在不认为这是可能的。
答案 2 :(得分:0)
对于到达这里的其他人:
我认为这可能是由于 wxWidgets 库(dll/共享对象)使用与应用程序不同的字符串设置(宽/UTF-16/16 位与窄/UTF-8/字符)编译的。
很抱歉,我没有时间在我的案例中进一步调查这个问题,并且最终在同一棵树中编译了库和应用程序但我相信这是要寻找的方向,因为它解释了否则不可能解释与 wxString 相关的崩溃。