转自: 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;
        }

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

 

posted on 2018-10-18 19:11  邶风  阅读(2471)  评论(0编辑  收藏  举报