• 5721阅读
  • 1回复

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

上一主题 下一主题
离线test654321
 

只看楼主 倒序阅读 楼主  发表于: 2008-05-27
— 本帖被 XChinux 执行加亮操作(2008-05-28) —
我现在是在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做,但是,感激仍然是多线程的,可能是出现同样的临界资源冲突问题。



不知道大家有什么好的建议,无论如何,都非常感谢!


离线test654321

只看该作者 1楼 发表于: 2008-05-28
问题已解决,经查阅齐亮翻译的《C++ GUI QT3编程》,得知用QApplication::processEvents()。经过测试,达到刷新界面的目的。
快速回复
限100 字节
 
上一个 下一个