【发布时间】:2015-02-25 02:35:24
【问题描述】:
我正在尝试使用 wxWidgets 以跨平台方式创建打开/保存 FileDialog 窗口。所以我查看了the documentation 中的示例。我还想创建没有父窗口的独立窗口,因为我没有在程序的其他地方使用 wxApp/wxWindow 的任何其他实例。
另外,我需要有自己的main函数,所以我不想使用IMPLEMENT_APP之类的宏。我尝试按照here 给出的说明进行操作,并提出了以下最小程序:
#include <wx/wx.h>
#include <string>
#include <iostream>
std::string openFile() {
wxFileDialog openFileDialog(NULL, _("Open XYZ file"), "", "",
"XYZ files (*.xyz)|*.xyz", wxFD_OPEN|wxFD_FILE_MUST_EXIST);
if (openFileDialog.Show() == wxID_CANCEL)
return ""; // the user changed idea...
// proceed loading the file chosen by the user;
return "something";
}
int main(int argc, char *argv[]) {
std::cout << wxEntryStart(argc, argv) << std::endl;
std::string s = openFile();
wxEntryCleanup();
}
这是我用来编译代码的 CMakeLists.txt:
CMake_Minimum_Required(VERSION 2.8.11)
Project(test)
Find_Package(wxWidgets REQUIRED)
Include(${wxWidgets_USE_FILE})
Add_Executable(test main.cpp)
Target_Link_Libraries(test ${wxWidgets_LIBRARIES})
尽管如此,当我运行这个程序时,我得到一个分段错误,尽管wxEntryStart 返回true,我不知道问题出在哪里。有什么建议吗?
【问题讨论】:
-
首先构建一个调试版本并在调试器中运行以查看在哪里发生崩溃。
-
如果我在调用
wxEntryStart之前添加一行包含wxApp::SetInstance( new wxApp() );的行,它就不会再崩溃了。但是,当我运行程序时,没有提示任何窗口,并且openFileDialog.Show()行立即返回(openFile返回"something")。