Qt应用系统托盘区域显示、托盘菜单示例

发布于:2025-04-02 ⋅ 阅读:(17) ⋅ 点赞:(0)

头文件包含:

#include <QSystemTrayIcon>  //托盘类
#include <QDesktopServices> //桌面事件类
#include "QAction"
#include "QMenu"
#include "QCloseEvent"

函数声明和对象定义:

QMenu *trayMenu;//托盘菜单
QSystemTrayIcon *tray;//托盘图标添加成员
QAction *minimizeAction;
QAction *maximizeAction;
QAction *restoreAction;
QAction *quitAction;
void closeEvent(QCloseEvent *event);
void hideEvent(QHideEvent *event);

初始化:

tray= new QSystemTrayIcon(this);//初始化托盘对象tray
tray->setIcon(QIcon(QPixmap(":/pic.ico").scaled(40, 40)));//设定托盘图标,引号内是自定义的png图片路径
tray->setToolTip("TIPS"); //提示文字
tray->show();//让托盘图标显示在系统托盘上

//托盘图标右键显示菜单
minimizeAction = new QAction("MinWin", this);
maximizeAction = new QAction("MaxWin", this);
restoreAction = new QAction("restore", this);
quitAction = new QAction("exit", this);
trayMenu = new QMenu(this);
trayMenu->addAction(minimizeAction);
trayMenu->addAction(maximizeAction);
trayMenu->addAction(restoreAction);
trayMenu->addSeparator();
trayMenu->addAction(quitAction);
tray->setContextMenu(trayMenu);

connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide()));
connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized()));
connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal()));
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
connect(tray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));

函数实现:


void Widget::iconActivated(QSystemTrayIcon::ActivationReason ireason)
{
    switch (ireason)
    {
        case QSystemTrayIcon::Trigger:
            this->showNormal();
            break;
        case QSystemTrayIcon::DoubleClick:
            this->showNormal();
            break;
        case QSystemTrayIcon::MiddleClick:
            break;
        default:
            break;
    }
}

//点击右上角关闭按钮,弹出对话框
void Widget::closeEvent(QCloseEvent *event)
{
    if(tray->isVisible())
    {
        QMessageBox MBox;
        MBox.setWindowTitle("关闭");
        MBox.setText("关闭或最小化到右下角托盘区域?");
        MBox.setIconPixmap(QPixmap(":/pic.ico").scaled(100, 100));
        QPushButton *btn_close = MBox.addButton("关闭", QMessageBox::AcceptRole);
        QPushButton *btn_min = MBox.addButton("最小化", QMessageBox::AcceptRole);
        QPushButton *btn_cancle = MBox.addButton("取消", QMessageBox::AcceptRole);

        MBox.exec();
        if (MBox.clickedButton() == (QAbstractButton*)btn_close)
        {
            quitAction->trigger();
            event->ignore();
        }
        else if(MBox.clickedButton() == (QAbstractButton*)btn_min)
        {

            hide();
            event->ignore();
        }
        else if(MBox.clickedButton() == (QAbstractButton*)btn_cancle)
        {
            event->ignore();
        }
    }
}

void Widget::hideEvent(QHideEvent *event)
{
    if(tray->isVisible())
    {
        hide(); //隐藏窗口
        event->ignore(); //忽略事件
    }
}


在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到