QT----给程序添加上任务栏托盘图标和退出

让我们的程序拥有任务栏托盘图标,实现程序后台运行,退出等功能

1、关闭程序保持后台

重写关闭事件,忽略点击窗口关闭

void MainWindow::closeEvent(QCloseEvent *event)
{
    // 隐藏窗口,而不是真正关闭
    setVisible(false);

    // 忽略关闭事件,阻止窗口真正关闭
    event->ignore();
}

2、添加任务栏托盘图标

在这里插入图片描述
创建一个任务链托盘图标,添加上退出和显示的菜单按钮,定义显示的槽函数

// 创建系统托盘图标对象
  QSystemTrayIcon* pSystemTray = new QSystemTrayIcon(&w);

  // 判断系统托盘图标是否创建成功
  if (NULL != pSystemTray) {
    // 设置托盘图标
    pSystemTray->setIcon(QIcon(":/res/totle.svg"));

    // 设置托盘图标的提示信息
    pSystemTray->setToolTip("别坐着了");

    // 显示托盘图标
    pSystemTray->show();
  }

  // ---------- 创建托盘菜单 ----------

  // 创建托盘菜单对象
  auto* trayMenu = new QMenu(&w);

  // 创建“显示面板”菜单项
  auto* showPanelAction = new QAction("显示面板", &w);

  // 连接菜单项的触发信号与主窗口的showPanel槽函数
  QObject::connect(showPanelAction,&QAction::triggered,&w,&MainWindow::showPanel);

  // 将菜单项添加到托盘菜单中
  trayMenu->addAction(showPanelAction);

  // 创建“退出”菜单项
  auto* quitAction = new QAction("退出",&w);

  // 连接菜单项的触发信号与 QApplication 的 quit() 槽函数
  QObject::connect(quitAction,&QAction::triggered,&w,&QApplication::quit);

  // 将菜单项添加到托盘菜单中
  trayMenu->addAction(quitAction);

  // 设置托盘图标的上下文菜单
  pSystemTray->setContextMenu(trayMenu);

  // 显示托盘图标
  pSystemTray->show();

完整代码

main。cpp

#include "mainwindow.h"
#include <QApplication>
#include <QSystemTrayIcon>
#include <QMenu>
int main(int argc, char *argv[])
{
  // 创建 Qt 应用程序对象
  QApplication a(argc, argv);

  // 创建主窗口对象
  MainWindow w;

  // ---------- 设置任务栏托盘图标 ----------

  // 创建系统托盘图标对象
  QSystemTrayIcon* pSystemTray = new QSystemTrayIcon(&w);

  // 判断系统托盘图标是否创建成功
  if (NULL != pSystemTray) {
    // 设置托盘图标
    pSystemTray->setIcon(QIcon(":/res/totle.svg"));

    // 设置托盘图标的提示信息
    pSystemTray->setToolTip("别坐着了");

    // 显示托盘图标
    pSystemTray->show();
  }

  // ---------- 创建托盘菜单 ----------

  // 创建托盘菜单对象
  auto* trayMenu = new QMenu(&w);

  // 创建“显示面板”菜单项
  auto* showPanelAction = new QAction("显示面板", &w);

  // 连接菜单项的触发信号与主窗口的showPanel槽函数
  QObject::connect(showPanelAction,&QAction::triggered,&w,&MainWindow::showPanel);

  // 将菜单项添加到托盘菜单中
  trayMenu->addAction(showPanelAction);

  // 创建“退出”菜单项
  auto* quitAction = new QAction("退出",&w);

  // 连接菜单项的触发信号与 QApplication 的 quit() 槽函数
  QObject::connect(quitAction,&QAction::triggered,&w,&QApplication::quit);

  // 将菜单项添加到托盘菜单中
  trayMenu->addAction(quitAction);

  // 设置托盘图标的上下文菜单
  pSystemTray->setContextMenu(trayMenu);

  // 显示托盘图标
  pSystemTray->show();

  // 进入应用程序事件循环
  return a.exec();
}

mainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMessageBox>
#include <QMainWindow>
#include <QCloseEvent>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public slots:
    void showPanel();
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void closeEvent(QCloseEvent *event);

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::closeEvent(QCloseEvent *event)
{
    // 隐藏窗口,而不是真正关闭
    setVisible(false);

    // 忽略关闭事件,阻止窗口真正关闭
    event->ignore();
}

void MainWindow::showPanel()
{
    // 显示窗口
    this->show();

    // 将窗口置顶,确保其显示在最前面
    this->raise();}

纯真丁一郎的博客:有时间就要学习
  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值