1. 程式人生 > >Qt程式最小化執行,還原後窗體不重新整理的問題

Qt程式最小化執行,還原後窗體不重新整理的問題

 

Qt程式最小化執行,還原後窗體不重新整理的問題解決

程式執行現象是這樣的,一個包含有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;
        }

}

 

 

qt QWidget窗體最小化(showMinimized)後點工作列恢復後介面卡死

方法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);
}