首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

Qt多线程中怎么显示QMessageBox

2013-02-25 
求教:Qt多线程中如何显示QMessageBox?现在的项目中为了保证界面的实时响应,将任务在新线程中执行,但是执行

求教: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的多线程是不是很不合理?线程应该向打开他的父线程发送消息才对,怎么会向其父线程的父窗口去发送消息??!! Qt多线程?窗口显示
[解决办法]

引用:
引用:QMessagebox只能 用于主线程
非主线程不能直接调用QMessagebox
建议用signal-slot关联

你好,我不太明白你说的signal-slot关联,你能说的具体点吗?万分感谢。
我的测试对话框类中有将信号和槽进行连接connect(testThread,SIGNAL(emitMsgBoxSignal(……

把connect的最后一个参数去掉。
[解决办法]


http://stackoverflow.com/questions/2806552/qprogressbar-not-showing-progress/2806730#2806730

引用:
引用:QMessagebox只能 用于主线程
非主线程不能直接调用QMessagebox
建议用signal-slot关联

你好,我不太明白你说的signal-slot关联,你能说的具体点吗?万分感谢。
我的测试对话框类中有将信号和槽进行连接connect(testThread,SIGNAL(emitMsgBoxSignal(……

热点排行