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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章