Debug:Qt的Qwidget退出按钮X要点击2次才能够退出
问题描述:
一个基于Qt界面可视化的机器人系统控制程序,有一个Qwidget,需要点击两次才退出按钮“X”能正常退出。
解决方案:
首先查看该Qwidget类的构造函数中有无阻塞性或者执行时间相对较长的语句,若有,那么问题大概就是它了。
代码段
此为利用Coin3D显示机器人运动的三维仿真部分代码片段:
myviewer = new SoQtExaminerViewer(qwidget);
myviewer->setSceneGraph(root);
myviewer->setBackgroundColor(SbColor(0.8, 0.8, 0.8));
//myviewer->setTitle("open invenor robot");
myviewer->show();
myviewer->viewAll();
SoQt::mainLoop(); //此语句为该线程阻塞语句
SoQt::mainLoop(); //此语句为该线程阻塞语句,在该代码后面的程序因为被阻塞都不执行,所以在该代码之后的connect语句都无效。
另外:若SoQt::mainLoop()在Qwidget的构造函数中,则该Qwidget需要点击两次才退出按钮“X”能正常退出。
初始解决方案:
将Qwidget类的构造函数中阻塞性或者执行时间相对较长的语句放到Qthread线程中执行即可。
SoQt::mainLoop(); //此语句为该线程阻塞语句。
后续:
经测试发现,将SoQt::mainLoop();注释掉,程序也可以继续执行,原因是qt程序main函数中的exec()与mainloop有同相似的功能。
在这里作下笔记。不足之处请指出!愿我们都能被温柔以待!