Qt实现系统托盘

        平时大多数看到的软件都是带系统托盘的,这样软件可以在后台运行,挺好的。今天看了下Qt自带的demon,中间有参考了下,实现了这个小小的功能,就将这个功能添加到了自己之前的一个项目中,效果蛮好的。界面如下所示:

右击系统托盘就会显示当前设定的各个菜单功能:

怎么样,效果还好吧。实现这个小功能厅满意的。右键点击弹出的菜单可以自行设定所需的。另外可以设定鼠标单击、双击、中间键分别按下时所触发的动作。主要代码如下所示:

1、首先需要添加头文件,Qsystem/trayIcon类、QMenu类和QAction三个类

<span style="font-size:18px;"><strong>    QSystemTrayIcon *myTrayIcon;                                  //系统托盘指针
    QMenu *myMenu;                                                //系统托盘菜单
    QAction *miniSizeAction;                                      //最小化
    QAction *maxSizeAction;                                       //最大化
    QAction *restoreWinAction;                                    //还原
    QAction *quitAction;                                          //退出
    QAction *checkUpdate;                                         //检查更新</strong></span>

功能功能实现:

<span style="font-size:18px;"><strong>/*
 *函数功能:创建系统托盘菜单
 *输入参数:无
 *输出参数:无
 *说明:此函数用于创建系统托盘的菜单,提供用户点击相应的菜单进行操作
*/
void MainWindow::CreateTrayMenu()
{
    miniSizeAction = new QAction(tr("最小化(&N)"),this);
    miniSizeAction->setToolTip(tr("最小化"));
    miniSizeAction->setIcon(QIcon(":/images/systemtrayico/minac.png"));

    maxSizeAction = new QAction(tr("最大化(&X)"),this);
    maxSizeAction->setToolTip(tr("最大化"));
    maxSizeAction->setIcon(QIcon(":/images/systemtrayico/maxac.png"));

    restoreWinAction = new QAction(tr("还原(&R)"),this);
    restoreWinAction->setToolTip(tr("还原"));
    restoreWinAction->setIcon(QIcon(":/images/systemtrayico/restoreac.png"));

    quitAction = new QAction(tr("退出(&Q)"),this);
    quitAction->setToolTip(tr("退出"));
    quitAction->setIcon(QIcon(":/images/systemtrayico/exitac.png"));

    checkUpdate = new QAction(tr("检查更新(&C)"),this);
    checkUpdate->setToolTip(tr("检查更新"));
    checkUpdate->setIcon(QIcon(":/images/systemtrayico/updateac.png"));

    //将各个菜单进行槽连接,触发相应的动作
    connect(miniSizeAction,SIGNAL(triggered()),this,SLOT(hide()));
    connect(maxSizeAction,SIGNAL(triggered()),this,SLOT(showMaximized()));
    connect(restoreWinAction,SIGNAL(triggered()),this,SLOT(showNormal()));
    connect(quitAction,SIGNAL(triggered()),this,SLOT(logoutWidget()));
    connect(checkUpdate,SIGNAL(triggered()),this,SLOT(checkSysUpdate()));

    //将创建的菜单对象添加到系统托盘的菜单中
    myMenu = new QMenu((QWidget*)QApplication::desktop());
    myMenu->addAction(miniSizeAction);
    myMenu->addAction(maxSizeAction);
    myMenu->addAction(restoreWinAction);
    myMenu->addSeparator();
    myMenu->addAction(checkUpdate);
    myMenu->addSeparator();                 //加入一个分隔符
    myMenu->addAction(quitAction);
}

/*
 *函数功能:创建软件最小化时的系统图标以及一些信息的显示
 *说明:对系统是否支持系统图盘图标特效作出判断,支持就执行相应的动作
*/
void MainWindow::CreateTrayIcon()
{
    CreateTrayMenu();

    //判断系统是否支持系统托盘图标
    if(!QSystemTrayIcon::isSystemTrayAvailable())
    {
        return;

    }

    myTrayIcon = new QSystemTrayIcon(this);
    myTrayIcon->setIcon(QIcon(":/images/main.png"));
    myTrayIcon->setToolTip(tr("大众超市收银系统 V2.0"));

    myTrayIcon->showMessage("大众软件","软件进入了最小化模式,若想恢复,点击还原",QSystemTrayIcon::Information,10000);
    myTrayIcon->setContextMenu(myMenu);
    myTrayIcon->show();

    connect(myTrayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconAcitvated(QSystemTrayIcon::ActivationReason)));
}</strong></span>

鼠标点击事件处理:

<span style="font-size:18px;"><strong>/*
 *函数功能:执行鼠标点击系统托盘菜单后相应的动作
 *说明:当鼠标点击菜单时所触发的动作
 *     (左、右)单击、双击、中间按钮。可以对这几个动作分别处理相应的事件
*/
void MainWindow::iconAcitvated(QSystemTrayIcon::ActivationReason reason)
{
    switch(reason)
    {
    case QSystemTrayIcon::Trigger:
        this->showNormal();
        break;
    case QSystemTrayIcon::DoubleClick:
        this->showMaximized();
        break;
    case QSystemTrayIcon::MiddleClick:
        //
        break;
    default:
        break;
    }
}</strong></span>

基本代码就这些。

需要代码的可以留下邮箱,发给你们……

技术在于交流……

时间: 2024-08-05 10:22:11

Qt实现系统托盘的相关文章

Qt 实现系统托盘,托盘菜单,托盘消息

Qt 实现系统托盘,托盘菜单,托盘消息 系统托盘就是运行的某个程序在电脑右下角的小图标,相信大家都很熟悉.QT 提供了QSystemTrayIcon类用于实现程序的托盘.QT提供了托盘示例,在examples文件夹下面,大家可以自行研究. 下面是我自己进行实现的一个示例,主要实现的功能: 1.托盘显示,托盘图标添加: 2.托盘激活事件分发: 3.托盘菜单: 4.托盘消息,点击消息,显示主窗口. 想要显示 托盘图标,首先需要创建一个QSystemTrayIcon对象.可以给此对象设置一些信息,比如

使用QT创建系统托盘

使用QT来创建一个系统托盘,事实上是一件很简单的事.为什么这么说?一是因为QT文档给出了比较详细的例子,二是QT的结构比较优雅,设计风格统一.但是在动手之前,我们要从哪里下手?虽然QT文档给出了一个比较详细的例子,但由于功能较多,所以看起来比较费劲.我们在这只是抽丝剥茧,只实现系统托盘这一个功能. 首先,使用QT creator创建一个GUI工程,继承于QDialog还是QMainWindow还是QWidget都无所谓.我们以继承QMainWindow为例说明.创建完毕之后,creator将自动

Qt系统托盘

Qt的系统托盘的使用,可比mfc中好多了!他封装了一个专门的QSystemTrayIcon类,建立系统托盘图标.其实在Qt提供的示例程序已经很不错了,$QTDIR\examples\desktop\systray在这里简单的实现一个系统托盘功能,对其系统托盘类的使用做以演示. #include <QtGui>class Window: public QWidget{    Q_OBJECT        public:    Window(); private:    void showMes

Qt 系统托盘(加hover效果)

最近项目需要添加系统托盘,本来Qt的QSystemTrayIcon可以实现的,但是要求要添加hover效果,并显示未读消息(就和qq的托盘差不多,移动上去显示未读列表),加了这个要求QSystemTrayIcon就没法实现了,最后使用的是NOTIFYICONDATA实现的,记录下. 1.创建一个系统托盘: NOTIFYICONDATA m_nid; CMsgTrayPos m_traypos; QLabel *m_pSysIcon; qApp->installNativeEventFilter(

【Qt编程】系统托盘的显示

本文主要讨论Qt中的系统托盘的设置.系统托盘想必大家都不陌生,最常用的就是QQ.系统托盘以简单.小巧的形式能让人们较快的打开软件.废话不多说,下面开始具体介绍. 首先,新建一个Qt Gui项目,类型选择QMainWindow,类名也选择默认的mainwindow.这时,工程项目中就有3个文件(界面文件不用管):mainwindow.h mainwindow.cpp main.cpp.然后,分别修改3个文件如下: 1.mainwindow.h #ifndef MAINWINDOW_H #defin

【Qt开发】实现系统托盘,托盘菜单,托盘消息

概述 系统托盘就是在系统桌面底部特定的区域显示运行的程序.windows在任务栏状态区域,linux在布告栏区域.应用程序系统托盘功能,是比较普遍的功能,本篇将详细的介绍如何实现该功能. 演示Demo实现功能: 1.应用启动后,任务栏,系统托盘可以看到该程序. 2.点击右上角×关闭窗口,自动隐藏窗口,托盘可以看到该程序. 3.鼠标在托盘图标上右键,弹出"退出程序"菜单栏,并带有图标. 步骤: 1.工程中新建TrayDialog类,基类是QDialog,在界面上添加Text Browse

Qt之自定义托盘

说起Qt,真是个不错的ui库,不仅仅ui做的好,其他方便也不差,在扩平台方便也是非常的强大.这篇文章我将会分析下qt的托盘,QSystemTrayIcon是qt的托盘类,托盘类的用途是什么我就不说了,自行百科就好,关键问题是我们要实现怎么的托盘. 说起常用的客户端软件,qq,微信等聊天工具,有这么几个托盘事件: 1.来消息图标闪烁 2.气泡消息提示 3.鼠标左键单击.左键双击.右键单击.滚动单击 上述这三种事件QSystemTrayIcon类都完全能够解决,但是托盘的hover事件却无能为力,如

Qt之自定义托盘(二)

上一篇文章讲述了自定义Qt托盘,不过不是使用QSystemTrayIcon这个类,而是我们自己完全自定义的一个类,我们只需要处理这个类的鼠标hover.鼠标左键点击.鼠标右键点击和鼠标左键双击,就可以完全模拟出qq的托盘样式来.文章的最后我也是提供了一个demo的下载链接,那是一个可以完全运行的demo,处理了鼠标hover事件,并模拟出了鼠标离开和进入事件,这一节我将一步一步讲解怎么实现一个完美的托盘,包括托盘菜单的显示.托盘tooltip和托盘hover时的弹框显示. 看本片文章之前,同学们

深度探索QT窗口系统(五篇)

窗口作为界面编程中最重要的部分,没有窗口就没有界面,是窗口让我们摆脱了DOS时代,按钮是一个窗口,文本框是一个窗口,标签页是一个窗口,...一个窗口可以由多个窗口组成,每天我们都在与窗口打交道,当你打开windows时,桌面就是一个窗口,你打开浏览器时,你也正在访问窗口...好了,回到今天的话题,QT窗口系统,QT是一个跨平台的框架,类似微软的MFC,Borland的OWL,前者只适用于windows,而使用QT你可以开发windows平台应用程序,你也可以开发linux应用程序,当然了你也可以