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

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

  • 相关阅读:
    VC常用代码
    richedit
    vc++ 2005 发布程序
    管道应用之捕获控制台程序信息
    黑客基础知识编程(转)
    Get All IE Info from win32 api
    vc 界面编程常用方法(http://blog.emuch.net/244485/spacelistblogitemtypeid2708.html)
    使用ADO调用存储过程
    在C#中如何实现文件夹的复制(转)
    C语言开发病毒程序(转)
  • 原文地址:https://www.cnblogs.com/zhangxuan/p/9812545.html
Copyright © 2011-2022 走看看