1. 程式人生 > >qt視窗最小化之後無法開啟

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;
        }

}
-------------------------------------------------------------------------------------------