转自: https://blog.csdn.net/qiangzi4646/article/details/79743604
http://www.cnblogs.com/lingdhox/p/3316910.html
https://bbs.csdn.net/topics/391955966
http://www.cnblogs.com/lingdhox/p/3316910.html
https://blog.csdn.net/mengxinmoses/article/details/8177171
方法1 重写changeEvent
//头文件申明 void changeEvent(QEvent *e); //函数实现 void myWidgetWindow::changeEvent(QEvent *e) { switch (e->type()) { case QEvent::WindowStateChange: { this->update(); this->repaint(); e->ignore(); break; } default: break; } }
方法2 重写showEvent
//头文件申明 void showEvent(QShowEvent *e); //函数实现 void myWidgetWindow::showEvent(QShowEvent *e) { this->setAttribute(Qt::WA_Mapped); QWidget::showEvent(e); }
对无边框的QT窗体设置点击任务栏按钮最小化和还原事件
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint);
--------------------------------------------------------------------------------------------------------------------------------------------------------
程序运行现象是这样的,一个包含有QTableWidget的窗体,Item上使用setCellWidget方法嵌入的自定义的widget,上面显示下载进度条、按钮等等。当下载任务进行的时候,进度条是动态显示完成百分比的,此时将其最小化。当任务完成后,重新还原该窗体,进度条还保留在最小化时的程度,直到其它列表操作后才瞬间刷新到应该的样子。
判断问题原因是Qt窗体在最小化并没有进行实际上的update操作,直到它show出来后才进行刷新的,这样能够比较节省资源,提高运行效率和速度。本例中窗体在还原时虽然刷新,但是其中的QTableWidget却没有收到update的操作,这样就导致了显示内容不正常。 解决的办法是在Qt窗体中处理changeEvent(QEvent *e),当e->type()== QEvent::WindowStateChange 时控制QTableWidget刷新界面。
例如:
void CloudStore::changeEvent(QEvent *e)
{
qDebug()<< "CloudStore::changeEvent()";
switch (e->type()) {
case QEvent::WindowStateChange:
if(m_usualAppTable){ //m_usualAppTable 即为QtableWidget
m_usualAppTable->update();
}
}
this->repaint();
e->ignore();
default:
break;
}
}
-------------------------------------------------------------------------------------------