我现在是在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做,但是,感激仍然是多线程的,可能是出现同样的临界资源冲突问题。
不知道大家有什么好的建议,无论如何,都非常感谢!