c – 由QMessageBox冻结的应用程序
发布时间:2020-12-16 07:08:28 所属栏目:百科 来源:网络整理
导读:我有这小段代码: #include QApplication#include QWidget#include QBasicTimer#include QMessageBoxclass MyWidget:public QWidget{public: QBasicTimer timer;protected: void timerEvent(QTimerEvent*e){ if(e-timerId()==timer.timerId()){ timer.stop()
我有这小段代码:
#include <QApplication> #include <QWidget> #include <QBasicTimer> #include <QMessageBox> class MyWidget:public QWidget{ public: QBasicTimer timer; protected: void timerEvent(QTimerEvent*e){ if(e->timerId()==timer.timerId()){ timer.stop(); QMessageBox::critical(this,"Oups","I hope you were not resizing the main window."); return; } QWidget::timerEvent(e); } }; int main(int argc,char*argv[]){ QApplication app(argc,argv); MyWidget w; w.timer.start(2000,&w); w.show(); return app.exec(); } 我显示一个QWidget,它在两秒后显示一个QMessageBox. 唯一的解决方案是使用ALT TAB导航到Visual studio并停止调试器. 系统(如果重要): > Windows 7 64位. 我的问题: >这是一个已知的错误吗? 解决方法
根据Digia支持,这是一个错误.但是,它们提供了可接受的解决方法.
就在QMessageBox :: critical之前,我们可以添加一个ReleaseCapture();像这样: #ifdef Q_OS_WIN ReleaseCapture(); #endif 这种行为可以追溯到Qt 4.7(参见user3183610的评论).窗口将恢复原始大小. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |