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