求教:Qt多线程中如何显示QMessageBox?
现在的项目中为了保证界面的实时响应,将任务在新线程中执行,但是执行的过程中经常需要显示一些QMessageBox对话框和用户进行交互,经常报告ASSERT failure in QWidget: "Widgets must be created in the GUI thread.", file kernel/qwidget.cpp, line 1299,求教我该如何去显示这些QMessageBox对话框?
我有两个对话框,主对话框和测试对话框。项目启动时将打开主对话框,点击主对话框中的按钮将打开测试对话框(模式对话框),点击测试对话框中的按钮将新建一个测试线程去运行测试程序,我在测试线程中需要弹出message对话框的地方向测试对话框去发送一个消息,测试对话框收到消息后将显示这个对话框,然后根据用户的选择,将选择的结果发回给测试线程,我发现测试对话框类能准确收到该消息,但是一到要显示QMessageBox的地方就报告ASSERT failure in QWidget: "Widgets must be created in the GUI thread.", file kernel/qwidget.cpp, line 1299。
希望大侠指教一下,问题出在哪里?我该如何去显示这个QMessagBox对话框?
另外,我查了写资料,很多都说窗口widget应该在GUI线程中显示,这个GUI线程指程序的主线程,难道我应该向主窗口发信息,在主对话框中弹出message对话框?那我不是需要在主对话框中很早就new一个测试线程,而测试线程需要的参数只有测试对话框运行后才能确定,参数得如何传递,真要这样,Qt的多线程是不是很不合理?线程应该向打开他的父线程发送消息才对,怎么会向其父线程的父窗口去发送消息??!!
我有两个对话框,主对话框和测试对话框。项目启动时将打开主对话框,点击主对话框中的按钮将打开测试对话框(模式对话框),点击测试对话框中的按钮将新建一个测试线程去运行测试程序,我在测试线程中需要弹出message对话框的地方向测试对话框去发送一个消息,测试对话框收到消息后将显示这个对话框,然后根据用户的选择,将选择的结果发回给测试线程,我发现测试对话框类能准确收到该消息,但是一到要显示QMessageBox的地方就报告ASSERT failure in QWidget: "Widgets must be created in the GUI thread.", file kernel/qwidget.cpp, line 1299。
希望大侠指教一下,问题出在哪里?我该如何去显示这个QMessagBox对话框?
另外,我查了写资料,很多都说窗口widget应该在GUI线程中显示,这个GUI线程指程序的主线程,难道我应该向主窗口发信息,在主对话框中弹出message对话框?那我不是需要在主对话框中很早就new一个测试线程,而测试线程需要的参数只有测试对话框运行后才能确定,参数得如何传递,真要这样,Qt的多线程是不是很不合理?线程应该向打开他的父线程发送消息才对,怎么会向其父线程的父窗口去发送消息??!!
...全文
相关推荐
Qt之QMessageBox 自定消息提示框(一)
QPSMessageBox继承自QDialog,里面所有的内容基本跟QMessageBox差不多,用法也差不多,区别就是改掉了样式变成苹果手机提示框的样子.
QMessageBox的四种使用方法
QMessageBox的四种使用方法,根据自己的需求可修改代码并应用到自己的项目中!
Pyqt5如何让QMessageBox按钮显示中文示例代码
主要给大家介绍了关于Pyqt5如何让QMessageBox按钮显示中文的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Pyqt5具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
Qt例程源代码QMessageBox.7z
Qt例程源代码QMessageBox.7z
Qt之QMessageBox 自定消息提示框(二)
QPSMessageBox继承自QObject,里面所有的内容都是自写的完全与QMessageBox无关,之所以叫这名字也是为了与Qt之QMessageBox 自定消息提示框(一)相关联.


