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会被执行,双重保险。

posted @ 2022-01-13 13:37  Qt小罗  阅读(4562)  评论(0编辑  收藏  举报