加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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位.
> Visual Studio 2013 Addin
> Qt 5.3.0 alpha

我的问题:

>这是一个已知的错误吗?
>我做错了什么?
>有一个简单的解决方法吗?

解决方法

根据Digia支持,这是一个错误.但是,它们提供了可接受的解决方法.

就在QMessageBox :: critical之前,我们可以添加一个ReleaseCapture();像这样:

#ifdef Q_OS_WIN
    ReleaseCapture();
#endif

这种行为可以追溯到Qt 4.7(参见user3183610的评论).窗口将恢复原始大小.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读