看我们电脑最下面一行的任务栏,会发现有一些软件被关闭后,还会继续存在任务栏中,当点击任务栏中的图标时,又会跳出来这个软件的画面,主要用到了Qt中的QSystemTrayIcon这个类,下面我们来简单的展示下实现的方法:
//"c.cpp"的代码:
#include "c.h"
c::c(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//创建一个菜单,只包含一个quit菜单项.
m_menu = new QMenu;
m_quitAction = new QAction("quit", this);
m_menu->addAction(m_quitAction);
//创建一个QSyStemTrayIcon的对象.
m_trayIcon = new QSystemTrayIcon();
//设置图标.
m_trayIcon->setIcon(QIcon("tray.ico"));
//设置右键菜单.
m_trayIcon->setContextMenu(m_menu);
m_trayIcon->show();
//设置提示.
m_trayIcon->setToolTip("click me~!");
//设置显示一个messageBox3秒.
m_trayIcon->showMessage(QString::fromLocal8Bit("成功"), QString::fromLocal8Bit("您已成功连接到网络!"),QSystemTrayIcon::Information,3);
//这个是对于托盘图标的触摸事件,当被单击,双击等时发出信号.
connect(m_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconTouchSlot(QSystemTrayIcon::ActivationReason)));
//当点击图标上面的messageBox时发出信号.这里只是用来演示这个信号.
connect(m_trayIcon, SIGNAL(messageClicked()), this, SLOT(messageClickedSlot()));
//对图标右键产生的菜单的quit菜单项做出操作.
connect(m_quitAction, SIGNAL(triggered()),this, SLOT(quitActionSlot()));
}
c::~c()
{
}
void c::trayIconTouchSlot(QSystemTrayIcon::ActivationReason type)
{
//判断用户对图标触摸的类型.是双击,还是点击,还是右击等等.
switch (type)
{
case QSystemTrayIcon::Trigger:
case QSystemTrayIcon::DoubleClick:
//正常模式显示.
this->showNormal();
//当前窗口显示为顶级窗口,如果没有这条语句的话,窗口就可能会出现在底层,被别的页面层覆盖而看不到了.
this->activateWindow();
break;
default:
break;
}
}
void c::messageClickedSlot()
{
QMessageBox::information(this, "clicked", "clicked!");
}
void c::closeEvent(QCloseEvent *event)
{
//当我们点击右上角的X时,有些软件只是想把软件最小化,还是可以通过任务栏的图标来显示窗口的.
this->setVisible(false);
//对关闭事件做出一个反应.
event->ignore();
}
void c::quitActionSlot()
{
//关闭程序.
QApplication::exit(-1);
}
下面是”c.h”头文件的代码:
#ifndef C_H
#define C_H
#include <QtWidgets/QMainWindow>
#include "ui_c.h"
#include <QSystemTrayIcon>
#include <QAction>
#include <QMenu>
#include <QMessageBox>
#include <QCloseEvent>
#include <QMouseEvent>
class c : public QMainWindow
{
Q_OBJECT
public:
c(QWidget *parent = 0);
~c();
private slots:
void trayIconTouchSlot(QSystemTrayIcon::ActivationReason type);
void messageClickedSlot();
void quitActionSlot();
protected:
void closeEvent(QCloseEvent *event);
private:
Ui::cClass ui;
QSystemTrayIcon *m_trayIcon;
QMenu *m_menu;
QAction *m_quitAction;
};
#endif // C_H