zoukankan      html  css  js  c++  java
  • Qt小技巧11.界面假死或不刷新的处理方式

    1 遇到的问题

    有时会遇到这样一种情况,比如界面最小化或者界面关闭后(进程未退出),当重新显示时界面确是一片白的,原因是paintEvent并被未调用,导致界面未刷新。如果手动改变下界面大小时又可以正常显示了,因为此操作调用了paintEvent,刷新了界面。

    2 解决办法

    怎么办呢,处理也比较简单,重写下showEvent事件函数就行:

    void MainWindow::showEvent(QShowEvent *event)
    {
        setAttribute(Qt::WA_Mapped);
        QMainWindow::showEvent(event);
    }
    

    注意:需要在每次界面显示时调用下setAttribute(Qt::WA_Mapped)才行。

    后经大量测试发现,这样还是有一定几率出现假死现象,于是加两行代码:

    void MainWindow::showEvent(QShowEvent *event)
    {
        setAttribute(Qt::WA_Mapped);
        QMainWindow::showEvent(event);
    
        QSize oldSize = this->size();
        resize(oldSize + QSize(10, 10));
        resize(oldSize);
    }
    

    这样做的目的就是确保paintEvent会被执行,双重保险。

    作者QQ:115124903,欢迎交流。
    推荐涛哥的QQ群,1群:734623697,2群:342341405,踏上Qt进阶之路。
  • 相关阅读:
    [bzoj1089] 严格n元树
    [bzoj1097] 旅游景点atr
    [hdu3887] Counting Offspring
    [POJ3321] Apple Tree
    [POJ3635] Full Tank?
    git
    【MySQL】数据的导出导入
    Ubuntu python 开发环境配置
    测试markdown
    约瑟夫环问题-java实现
  • 原文地址:https://www.cnblogs.com/luoxiang/p/15797219.html
Copyright © 2011-2022 走看看