zoukankan      html  css  js  c++  java
  • 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;
            }

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

  • 相关阅读:
    中科大算法分析与设计分布式算法复习知识点
    记录一些实用网站
    《TensorFlow机器学习项目实战》pdf及源码
    DevC++连接MySQL可用详细教程
    【转】MySQL合理使用索引
    【原】基于Feign 重写自定义编码器
    【原】logback实现按业务输出到对应日志文件
    【原】MDC日志链路设计
    关于看源码的心得体会
    【原】基于Spring实现策略模式
  • 原文地址:https://www.cnblogs.com/zhangxuan/p/9812545.html
Copyright © 2011-2022 走看看