系统托盘--Qt

前言

Qt中系统托盘被类QSystemTrayIcon封装。在日常中,我们常见的托盘是QQ的小企鹅,在软件使用中,有时候用托盘作为访问软件的入口。所以,下面对QSystemTrayIcon进行简单的介绍,从而拥有基本的概念。

理论介绍

通过帮助文档,我们可以看到QSystemTrayIcon的用法很简单,经常用到的方法也就那么几个:

void setToolTip(const QString &tip)          //设置工具提示
void setIcon(const QIcon &icon)              //设置托盘图标
void setContextMenu(QMenu *menu)     //设置托盘右键菜单
void showMessage(const QString &title, const QString &message, QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int millisecondsTimeoutHint = 10000)  //设置托盘气泡信息(槽函数)

代码示例

这个是个特别简单的例子,只实现了带有几个菜单的系统托盘,并在界面关闭时,弹出信息气泡。代码如下:

.h文件

protected:
    void closeEvent(QCloseEvent *);

private:
    Ui::LoginDialog *ui;
    QSystemTrayIcon* sysTray;
    QAction* minAction;
    QAction* maxAction;
    QAction* restAction;
    QAction* quitAction;
    QMenu* contextMenu;

.cpp文件

    //构造函数中
    sysTray=new QSystemTrayIcon(this);
    sysTray->setIcon(QIcon(":/res/head.PNG"));
    sysTray->setToolTip("test system tray icon");

    minAction=new QAction("minimum window",this);
    minAction->setIcon(QIcon(":/res/weather_lightning.png"));
    connect(minAction,SIGNAL(triggered(bool)),this,SLOT(hide()));

    maxAction=new QAction("maximum window",this);
    maxAction->setIcon(QIcon(":/res/weather_rain.png"));
    connect(maxAction,SIGNAL(triggered(bool)),this,SLOT(showMaximized()));

    restAction=new QAction("restore window",this);
    restAction->setIcon(QIcon(":/res/weather_snow.png"));
    connect(restAction,SIGNAL(triggered(bool)),this,SLOT(showNormal()));

    quitAction=new QAction("quit window",this);
    quitAction->setIcon(QIcon(":/res/weather_rain.png"));
    connect(quitAction,SIGNAL(triggered(bool)),qApp,SLOT(quit()));

    contextMenu=new QMenu(this);
    contextMenu->addAction(minAction);
    contextMenu->addAction(maxAction);
    contextMenu->addAction(restAction);
    contextMenu->addAction(quitAction);

    sysTray->setContextMenu(contextMenu);
    sysTray->show();
void LoginDialog::closeEvent(QCloseEvent *e)
{
    if(sysTray->isVisible())
    {
        hide();
        sysTray->showMessage("Tips","The program is running behind!");
        e->ignore();
    }
}

 

 

效果图

这个效果图做的不太好,有个系统没**的水印,将就看:模拟简陋版QQ的登录,打开软件,界面与托盘同时出现;当登录成功,登录界面隐藏(没做服务界面,故将登录隐藏,以便与托盘交流);右击托盘菜单,可点击恢复功能将登录页面显示出来,若此时关闭页面可看到右下角气泡信息。

系统托盘--Qt

结束语


生活处处可见代码的优雅,趣味。