首页 > 其他分享 >QSystemTrayIcon增加系统托盘图标Demo

QSystemTrayIcon增加系统托盘图标Demo

时间:2022-10-31 21:06:13浏览次数:66  
标签:Demo 系统托盘 myTrayIcon QAction QSystemTrayIcon void menu MainWindow


先看一下效果:

QSystemTrayIcon增加系统托盘图标Demo_ico

代码如下


#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMenu>
#include <QSystemTrayIcon>
#include <QCloseEvent>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QSystemTrayIcon *m_myTrayIcon;
QMenu *m_menu;
QAction *m_miniSizeAction;
QAction *m_maxSizeAction;
QAction *m_restoreWinAction;
QAction *m_quitAction;
private:
void initTrayMenu();
void initTrayIcon();
private slots:
void iconActivated(QSystemTrayIcon::ActivationReason reason);
protected:
void closeEvent(QCloseEvent *event);
};
#endif // MAINWINDOW_H
源文件:


#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
initTrayMenu();
initTrayIcon();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initTrayMenu()
{
//这里&后面的字母是自己定义的
m_miniSizeAction = new QAction("Min(&V)",this);
m_maxSizeAction = new QAction("Max(&X)",this);
m_restoreWinAction = new QAction("Reduction(&R)",this);
m_quitAction = new QAction("Quit(&Q)",this);
m_miniSizeAction->setIcon(QIcon(":/ooopic_1489563147.ico"));
m_maxSizeAction->setIcon(QIcon(":/ooopic_1489563147.ico"));
m_quitAction->setIcon(QIcon(":/ooopic_1489563147.ico"));
m_menu = new QMenu((QWidget*)QApplication::desktop());
m_menu->addAction(m_miniSizeAction);
m_menu->addAction(m_maxSizeAction);
m_menu->addAction(m_restoreWinAction);
m_menu->addSeparator(); //加入一个分离符
m_menu->addAction(m_quitAction);
connect(m_miniSizeAction, SIGNAL(triggered()), this, SLOT(hide()));
connect(m_maxSizeAction, SIGNAL(triggered()), this, SLOT(showMaximized()));
connect(m_restoreWinAction, SIGNAL(triggered()), this, SLOT(showNormal()));
connect(m_quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
}
void MainWindow::initTrayIcon()
{
//判断系统是否支持系统托盘图标
if (!QSystemTrayIcon::isSystemTrayAvailable()) {
return;
}
m_myTrayIcon = new QSystemTrayIcon(this);
QIcon tmpIcon = QIcon(":/ooopic_1489563147.ico");
m_myTrayIcon->setIcon(tmpIcon); //设置图标图片
setWindowIcon(tmpIcon); //把图片设置到窗口上
m_myTrayIcon->setToolTip("SystemTrayIcon V1.0"); //托盘时,鼠标放上去的提示信息
m_myTrayIcon->showMessage("SystemTrayIcon","Hi,This is my trayIcon",QSystemTrayIcon::Information,10000);
m_myTrayIcon->setContextMenu(m_menu); //设置托盘上下文菜单
m_myTrayIcon->show();
connect(m_myTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
}
void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch(reason) {
case QSystemTrayIcon::Trigger:
case QSystemTrayIcon::DoubleClick:
showNormal();
break;
case QSystemTrayIcon::MiddleClick:
m_myTrayIcon->showMessage("SystemTrayIcon","Hi,This is my trayIcon",QSystemTrayIcon::Information,10000);
break;
default:
break;
}
}
void MainWindow::closeEvent(QCloseEvent *event)
{
if (m_myTrayIcon->isVisible()) {//最小化
m_myTrayIcon->showMessage("SystemTrayIcon","Hi,This is my trayIcon",QSystemTrayIcon::Information,5000);
hide();
event->ignore();
} else {
event->accept();
}
}
————————————————

标签:Demo,系统托盘,myTrayIcon,QAction,QSystemTrayIcon,void,menu,MainWindow
From: https://blog.51cto.com/u_15854865/5811253

相关文章

  • Qt5.6作浏览器Demo可查看地图
    这里用到了ui提升部件的小方法,记得设置控件为Microsoft webbrowser,先看看效果:用到ui里面的QAxWidget控件,用以下这个类来提升这个控件。#include<ActiveQt/QAxWidget>#inc......
  • Qt对Json的生成与解析Demo
    QJsonObject类用于封装JSON对象。JSON对象是键值对,其中键是唯一的字符串,其值由QJsonValue代表。一个QJsonObject可以从QVariantMap转换/被转换。QJsonArray类用于封装JSON数......
  • Qt创建和删除文件小Demo(顺便讲了补全功能)
    背景:笔者需要创建和删除多个pdd和多个pff文件(这些是自己创建的类型),一个个手动创建和删除很麻烦,就做了一款小软件解决此问题。先看一下效果:代码如下:①、头文件:#ifndefMAINWI......
  • QCombobox应用QStyledItemDelegate小Demo
    效果是这样的:QComboBox是个很基础的控件,也是继承自QWidget。①我们先建立代理类,继承自QStyledItemDelegate:1、头文件:#ifndefITEMDELEGATE_H#defineITEMDELEGATE_H#inclu......
  • QCamera同时打开多个USB摄像头小Demo
    先看一下效果:(最大传2M图片,所以我把图片缩小并降低了DPI) 注意:一定不要把usb摄像头接到同一个USB集线器上,我这里是一个接到电脑外置接口,一个接到PCI-usb接口上了。如果要接更......
  • Jenkins Pipeline 流水线-Demo
    JenkinsPipeline流水线流水线既能作为任务的本身,也能作为Jenkinsfile使用流水线可以让我们的任务从UI手动操作,转换为代码化,像dockerfile一样。从shell命令到配置文......
  • istio部署demoapp应用 (十四)sidecar
    创建client~#kubectlrunclient--image=ikubernetes/admin-box-it--rm--restart=Never--command--/bin/shIfyoudon'tseeacommandprompt,trypressingen......
  • grpc demo python客户端 c++服务端
    项目需啊将网站上传的图片传入c++推理引擎,网站使用flask架构,python编写,图片推理引擎是一个单独的server,c++编写,因此用grpc来传输比较合适。理论上来说只要规定好proto文件,......
  • Demo1
    publicclassHelloWorld{//public目前是起限制作用,限制文件名和类名保持一致,否则不会运行。//class:定义的一个类.后面定义该类的名称类就如一栋大楼。......
  • 今天重新复习了一下cloud-demo
    主要有这些知识点:nacos,feign,gataway。这三个都是涉及配置的知识点比较多。比如说对于每个服务,要配置它的NACOS注册中心地址,如果某个服务需要使用NACOS配置中心的动态......