精华内容
下载资源
问答
  • qt窗口最小化

    2021-04-08 16:31:20
    this->setWindowState(Qt::WindowMinimized);

    this->setWindowState(Qt::WindowMinimized);

    展开全文
  • 作为Qt初学者,最近在编写窗口最小化到托盘功能代码的时候遇到了点阻碍。 Qt自带的demo实现的功能太过繁琐,涉及知识点又太杂,很难理出最核心的思路。网上的文章代码也很多脱骨于这个demo,注释说明太少。 所以...

     

    作为Qt初学者,最近在编写窗口最小化到托盘功能代码的时候遇到了点阻碍。

    Qt自带的demo实现的功能太过繁琐,涉及知识点又太杂,很难理出最核心的思路。网上的文章代码也很多脱骨于这个demo,注释说明太少。

    所以自己对比了Qt的demo和网上的文章,自己写了个简单的最小化到系统托盘的功能。

    先看一下代码的实现功能:

    1.空白窗口,关闭叉叉不会关闭窗口,而是最小化到托盘

    2.系统托盘,单击恢复隐藏窗口

    3.系统托盘,右击出现菜单,菜单有两个选项:恢复窗口、关闭程序

    再看一下源代码(由于功能简单,所以很多模块功能就没有单独编写函数,都直接写在了初始化函数中)

     

    头文件mwin.h

    #ifndef MWIN_H
    #define MWIN_H
     
    #include <QWidget>
    #include <QtGui>
     
    class MWin : public QWidget
    {
        Q_OBJECT
    public:
        explicit MWin(QWidget *parent = 0);
        void init();//初始化函数
     
        QSystemTrayIcon *tray;//托盘图标
        QMenu *menu;//托盘菜单
        QAction *reset;//菜单实现功能:恢复窗口
        QAction *quit;//菜单实现功能:退出程序
     
    protected:
        void closeEvent(QCloseEvent *event);//由于要关闭窗口变为隐藏至托盘图标,所以要重写close事件
     
    signals:
     
    public slots:
    void TrayIconAction(QSystemTrayIcon::ActivationReason reason);//对托盘图标操作的槽:本代码实现单机图标恢复窗口功能
    };
     
    #endif // MWIN_H
    

     

    解释文件mwin.cpp

    #include "mwin.h"
    
    MWin::MWin( QWidget *parent ) :
    	QWidget( parent )
    {
    	init(); /* 初始化 */
    }
    
    
    void MWin::init()
    {
    	/****主窗口****/
    	this->setFixedSize( 200, 200 );
    	this->setWindowTitle( "托盘APP" );
    	/****托盘*** */
    	tray = new QSystemTrayIcon( this );                                                                                                                     /* 初始化托盘对象tray */
    	tray->setIcon( QIcon( QPixmap( ":/image/ico.png" ) ) );                                                                                                 /* 设定托盘图标,引号内是自定义的png图片路径 */
    	tray->show();                                                                                                                                           /* 让托盘图标显示在系统托盘上 */
    	QObject::connect( tray, SIGNAL( activated( QSystemTrayIcon::ActivationReason ) ), this, SLOT( TrayIconAction( QSystemTrayIcon::ActivationReason ) ) );  /* 连接信号与槽,实现单击图标恢复窗口的功能,槽是自定义的槽 */
    	/****初始化托盘菜单及功能****/
    	menu	= new QMenu( this );                                                                                                                            /* 初始化菜单 */
    	reset	= new QAction( this );                                                                                                                          /* 初始化恢复窗口 */
    	reset->setText( "显示窗口" );
    	QObject::connect( reset, SIGNAL( triggered() ), this, SLOT( showNormal() ) );                                                                           /* 菜单中的显示窗口,单击连接显示窗口 */
    	quit = new QAction( this );                                                                                                                             /* 初始化退出程序 */
    	quit->setText( "退出程序" );
    	QObject::connect( quit, SIGNAL( triggered() ), qApp, SLOT( quit() ) );                                                                                  /* 菜单中的退出程序,单击连接退出</span> */
    	
    	/*
    	 * qApp,是Qt自带的demo中的知识点,查了一下文档,qApp是Qt中所有app的指针,关闭它就可以关闭当前的程序
         * 之所以不用this,close(),是由于软件要求关闭改为最小化到托盘,所以close()的功能已经不再是关闭窗口的功能,所以要另寻方法
         * 将定义好的菜单加入托盘的菜单模块中
    	 */
    	 tray->setContextMenu( menu );
    	 menu->addAction( reset );
    	 menu->addAction( quit );
    }
    /* ***重置关闭close()*** */
    void MWin::closeEvent( QCloseEvent *event )
    {
    	hide();                 /* 隐藏窗口 */
    	event->ignore();        /* 忽略关闭事件 */
    }
    
    
    /*
     * 因为实现的是关闭窗口至系统托盘,所以我们先将窗口hide()隐藏,再忽略关闭窗口功能event->ignore()即可。
     * ***托盘图标槽***
     */
    void MWin::TrayIconAction( QSystemTrayIcon::ActivationReason reason )
    /* 参数是Qt的保留字,表示对托盘图标的操作,该槽函数功能只实现了单击功能,可以实现其他功能比如双击、中击,具体可查文档或者Qt自带demo(关键字tray) */
    {
    	if ( reason == QSystemTrayIcon::Trigger )
    		this->showNormal();  /* 如果对图标进行单击,则显示正常大小的窗口 */
    }
    
    

     

     

    主函数调用测试main.cpp

    
    #include <QtGui>
    #include "mwin.h"
     
    int main(int argc,char *argv[])
    {
        QApplication app(argc,argv);
    //***三行编码设置,保证中文字符***
    //本机电脑是UTF-8编码,其他电脑自行调试修改编码
        QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
        QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
        QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
     
        MWin *win=new MWin();
     
        win->show();
     
        return app.exec();
    }

     

    附上作者原文地址:https://blog.csdn.net/shihoongbo/article/details/38532771

    展开全文
  • 判断问题原因是Qt窗体在最小化并没有进行实际上的update操作,直到它show出来后才进行刷新的,这样能够比较节省资源,提高运行效率和速度。本例中窗体在还原时虽然刷新,但是其中的QTableWidget却没有收到update的...

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

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

     

    转载于:https://www.cnblogs.com/zhangxuan/p/9812545.html

    展开全文
  • qt 窗口最小化后隐藏

    2010-12-12 16:24:00
    窗口最小化后隐藏 通常最小化的窗口会在任务栏上显示一个按钮。当用户按一下这个按钮,窗口就还原了。这是一个被大多数桌面环境,比如Windows,KDE,GNOME所采用的普遍设计。不过,因为任务栏通常只是桌面边上...

    窗口最小化后隐藏

    通常最小化的窗口会在任务栏上显示一个按钮。当用户按一下这个按钮,窗口就还原了。这是一个被大多数桌面环境,比如Windows,KDE,GNOME所采用的普遍设计。不过,因为任务栏通常只是桌面边上一小行,容纳不了很多按钮,用户通常希望把那些不常用的程序隐藏起来,只在通知栏显示一个小图标,要使用的时候再点击那个小图标恢复窗口。这种作法最典型的例子是QQ和Winamp。

    原本以为这个功能是很容易的,今天试着做了一下,原来还有些小麻烦。最基本的思路是拦截窗口的最小化事件,通过阅读Qt文档,可以这么做:

    void MyWindow::changeEvent(QEvent* event)

    {

    if(event->type()==QEvent::WindowStateChange)

    {

    if(windowState() & Qt::WindowMinimized)

    {

    hide();

    mSystemTrayIcon->show();

    }

    QMainWindow::changeEvent(event);

    }

    把这个代码拿去试一下,发现不行,任务栏的按钮仍然还在,点击还原后窗口一片空白。仔细想一下,估计是因为这个changeEvent()是在Qt处理最小化事件前调用的。我们把窗口隐藏了,但是Qt还以为窗口正要最小化。仍然运行一遍处理最小化窗口的代码。所以出错了。

    解决的思路是先让Qt处理完窗口最小化,等处理完之后再隐藏窗口。这样的话,把hide()那一行改写成:

    QTimer::singleShot(0, this, SLOT(hide()));

    这个是singleShot()的特殊用法,如果第一个参数,也就是等待时间为0,当Qt回到消息循环的时候,通常就是当前处理的事件处理完之后就立即运行this->hide();

    点击通知栏图标的处理代码需要多一下setWindowState():

    MyWindow::showMe()

    {

    show();

    setWindowState(Qt::WindowNoState);

    }

    展开全文
  • QT 窗口最小化后隐藏

    千次阅读 2011-04-01 16:47:00
    转自:http://hi.baidu.com/yiwenyida/blog/item/b587e41a8b55de74dbb4bd51.html<br />通常最小化窗口会在任务栏上显示一个按钮。当用户按一下这个按钮,窗口就还原了。这是一个被大多数桌面环境,比如...
  • 窗口最小化后隐藏 通常最小化的窗口会在任务栏上显示一个按钮。当用户按一下这个按钮,窗口就还原了。这是一个被大多数桌面环境,比如Windows,KDE,GNOME所采用的普遍设计。不过,因为任务栏通常只是桌面边上一...
  • QT窗口最小化后,不显示任务栏图标

    千次阅读 2015-09-28 17:43:29
    void pxeclient::changeEvent(QEvent * event ) { if(event->type()==QEvent::WindowStateChange) ...if(windowState() & Qt::WindowMinimized) { hide(); m_sysTrayIcon->show();//显示托盘 m_sysTrayIcon
  • Qt窗口最大化/最小化/窗口状态判断

    千次阅读 2019-10-21 17:17:44
    QT 中有一个函数: void QWidget::setWindowState ( Qt::WindowStateswindowState ) 这样的函数,通过它可以设置...有了这个就非常easy 了,想让窗体最大,只需要 setWindowState(Qt::WindowMaximized);就行了 ...
  • ~ Qt::WindowMinMaxButtonsHint); setWindowFlags(windowFlags() &~ Qt::WindowCloseButtonHint); //Qt::WindowCloseButtonHint其实是一个值 0x00080000 这里的“&~”是取反以后再按位与的意思,下面的...
  • 窗口最小化,子窗口不跟随。 子窗口 设置 LrcDialog::LrcDialog(QWidget *parent) :QDialog(parent) { setWindowFlags(Qt::Window|Qt::FramelessWindowHint|Qt::CoverWindow |Qt::WindowStaysOnTopHint);
  • QT窗口去掉最大化最小化关闭按钮

    万次阅读 2017-07-15 10:10:48
    QT界面开发过程中,有的时候需要隐藏最大化最小化甚至是关闭按钮,以排除用户的操作系统无定义,让程序流向混乱现总结如下: 1、Qt的QDialog去掉最大化和最小化以及关闭按钮 :在构造函数中输入this->...
  • void Dialog::changeEvent(QEvent * event ){if(event->WindowStateChange){switch...windowState()){case Qt::WindowMinimized:this->hide();this->setWindowFlags(Qt::Tool); //隐藏任务栏上图标trayI...
  • 加入setWindowFlags(Qt::Tool); 这条代码可以解决这两个问题, 1、窗口下方任务栏中无程序图标显示 2、当只有一个窗口的时候且创建了托盘图标的时候,使用hide()隐藏窗口不会让程序直接退出。 效果图: ...
  • Qt窗口最小化到托盘

    千次阅读 2012-09-01 15:44:29
    窗口最小化后隐藏 通常最小化的窗口会在任务栏上显示一个按钮。当用户按一下这个按钮,窗口就还原了。这是一个被大多数桌面环境,比如Windows,KDE,GNOME所采用的普遍设计。不过,因为任务栏通常只是桌面边上一...
  • Qt : 窗口最小化时自定义操作.

    千次阅读 2018-02-19 19:24:03
    当我们对窗口的显示进行修改的时,有时候需要添加一些操作,这个...以下实现了通过事件过滤器把窗口最小化时的事件给优先处理了.用户可以自定义一些自己的操作. bool c::eventFilter(QObject *o, QEvent *e) { ...
  • QT widget 无边框窗口最小化后存在问题解决方法 设置窗口无边框 :setWindowFlags(Qt::FramelessWindowHint); 环境:qt 5.5.1 设置最小化后,还原窗口;部分控件QSS样式不更新,但是功能正常问题解决方法: 重写...
  • PyQt5 / Qt窗口最小化后,鼠标悬停,任务栏窗口预览(Windows速览)继续保持刷新状态问题描述解决方案 问题描述 最近在练习PyQt5,其中有一个功能是窗口启动后开始计时,在计时的时候,要求能在Windows的任务栏上...
  • //Qt窗口没有最小化,最大化按钮且最大化显示 int main(int argc, char *argv[]) { QApplication a(argc, argv); TestQtForWinCE w; w.setWindowFlags(w.windowFlags()& ~Qt::WindowMaximizeButtonHint&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 476
精华内容 190
关键字:

qt窗口最小化