wxWidgets应用程序在尝试启动新对话框时冻结
wxWidgets application freezes when trying to start new dialog
我正在开发一个wxWidgets应用程序,我正在尝试创建一个回调,它将显示对话框给出在我的自定义事件类作为指针动态创建的对话框对象。这样做的原因是我想要一个回调,它将启动任何对话框/窗口,而不知道对话框的确切类。
为此,我需要从主线程(例如回调函数)显示对话框,否则程序会遇到错误(在某些条件下它仍然运行,但通知用户它不是启动新窗口的正确方式)。
所以我创建了一个新的对话框,将它分配给我的自定义事件,并将事件排队到主窗口。
wxDialog *dialog = new TelemetryDialog(MainWindow::mInstance);
DialogEvent *event = new DialogEvent(EVENT_DIALOG_SHOW, dialog);
MainWindow::mInstance->m_eventHandler->QueueEvent(*event);
then in callback function:
wxDialog *dialog = event.getDialog();
if (dialog != NULL)
{
dialog->Show(true);
}
对话框显示为空,程序冻结。但是如果我像这样使用回调函数:
wxDialog *dialog = new TelemetryDialog(this);
dialog->Show();
很好。我一直在考虑克隆对话框对象,但这是不可能的(基类的复制构造函数是私有的)。
以前有人尝试过这样的东西吗?这可能吗?
我怀疑在工作线程中调用对话框构造函数是不允许的!
无论确切的问题是什么,我建议在主线程中做所有GUI的东西会更安全。这样的:
在自定义事件中,传递枚举整数。然后,在回调函数中,使用switch语句来构造并显示所需的对话框。
switch ( event.getDialogType() ) {
case TelemetryDialogType:
dialog = new TelemetryDialog(MainWindow::mInstance);
break;
...
}
dialog->Show(true);
相关文章:
- 如何在Qbutton的帮助下更改Q对话框的宽度
- 当对话框被接受时,如何用参数调用槽
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 如何多次询问来自QML对话框的输入?
- 选择文件对话框错误
- 自定义对话框(源自QDialog)不会关闭(Android)
- 如何在 MFC 对话框中使用 OnDraw
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- 从资源视图访问对话框时出现问题
- 如何检测窗口当前是否正在运行模式对话框?
- "最小化"按钮不会出现在 MFC 对话框中
- 如何获取QNetworkConfiguration UserChoice对话框?
- 表单显示对话框函数错误,并且不执行下面的语句
- 如何在 VC6 中的对话框中将图标设置为按钮
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 从无模式对话框启动CFileDialog时会冻结
- 在这个基于对话框的应用程序中,GUI会在几秒钟后冻结
- MFC 对话框在失去焦点时冻结
- Win32 API:打开对话框窗口后应用程序冻结
- wxWidgets应用程序在尝试启动新对话框时冻结