求教:当一个模态窗体B遮住一个底层窗体A,且B窗体销毁后,A窗体被遮住的部分无法刷新

weixin_38048698 2019-09-19 01:28:23
我现在是在Linux2.6.11、ARM9(S3C2410)、QT/Embedded2.3.7环境下开发一个产品测试系统。 我现在GUI界面都是基于对话框的,有几个对话框相互切换。 我基于QDialog类,设计了一个auto_run_dlg窗口,上面有一个auto_run按钮及一些文本显示如info_label等。当我点击auto_run按钮后,会自动执行若干后命令,全部命令执行完毕,大概需要3分钟。其中,如果某个命令出错,会弹出一个错误提示框err_dlg,用户点击确定后,继续执行余下的命令。在此过程中,auto_run_clicked()槽函数一直没有返回。 现在的问题是:如果auto_run_clicked()函数不返回,被err_dlg窗口遮盖的部分,在err_dlg窗口已销毁、我显式调用了info_label、auto_run_dlg->repaint()、update等函数后,仍然无法刷新,仍然残留着err_dlg的窗口画面。只有等到auto_run_clicked()函数返回,auto_run_dlg被遮住部分才刷新正常。另外:未被遮住的部分,无论auto_run_clicked() 是否返回,均可以看到正常的画面更新。 1、  我怎么才能够在auto_run_clicked()函数没有返回时刷新auto_run_dlg曾经被遮住的画面? 2、  有没有其他什么好的办法,实现我期望的效果? 我曾经想通过多线程方式做,就是点击auto_run按钮后,启动一个线程,按钮函数函数马上返回。但是,在qt/e2.3.7中,如果有另外的线程设定某个窗口部件,如label->setText()等,则,很容易导致系统paint事件与线程中的这种设置冲突,整个进程异常退出。也想用QTimer做,但是,感激仍然是多线程的,可能是出现同样的临界资源冲突问题。 不知道大家有什么好的建议,无论如何,都非常感谢!
...全文
4 点赞 收藏 1
写回复
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38077401 2019-09-19
问题已解决,经查阅齐亮翻译的《C++ GUI QT3编程》,得知用QApplication::processEvents()。经过测试,达到刷新界面的目的。
回复
相关推荐
发帖
其他技术讨论专区
创建于2021-05-12

102

社区成员

其他技术讨论专区
申请成为版主
帖子事件
创建了帖子
2019-09-19 01:28
社区公告
暂无公告