qt視窗最小化之後無法開啟
轉自: 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;
}
}
-------------------------------------------------------------------------------------------