一、效果
1、点击“闪烁”按钮可以模拟消息闪动,点击后弹出消息详情对话框;
2、托盘右键菜单包括:“显示”和“关闭”。
3、双击托盘显示程序,关闭后隐藏到托盘。
二、源码
主要代码如下:
1 //初始化托盘
2 void Dialog::InitTray()
3 {
4 QMenu *contexMenu = new QMenu(this); //注意右键菜单的父对象,在窗口销毁后要把菜单也销毁掉
5 QAction *shutAction = new QAction("关闭",this);
6 shutAction->setIcon(QIcon(":/image/close.png"));
7 QAction *showAtion = new QAction("显示",this);
8 showAtion->setIcon(QIcon(":/image/show.png"));
9
10 contexMenu->addAction(shutAction);
11 contexMenu->addSeparator();
12 contexMenu->addAction(showAtion);
13
14 connect(shutAction,SIGNAL(triggered()),this,SLOT(programExit())); //点击了这两个菜单
15 connect(showAtion,SIGNAL(triggered()),this,SLOT(ShowNormal()));
16
17 m_systemTray = new QSystemTrayIcon(this);
18 m_systemTray->setToolTip("Qt 托盘"); //放在图表上时候显示
19 m_systemTray->setContextMenu(contexMenu);
20 m_systemTray->setIcon(QIcon(":/image/qicon.png"));
21 m_systemTray->show();
22 connect(m_systemTray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(trayIconActived(QSystemTrayIcon::ActivationReason)));
23 //connect(m_systemTray, &QSystemTrayIcon::messageClicked, this, &Dialog::ShowMessageBox);
24
25 connect(timerT, &QTimer::timeout, this, &Dialog::sltTimerT);
26 connect(timerNoT, &QTimer::timeout, this, &Dialog::sltTimerNoT);
27 }
28
29
30 //托盘消息闪动
31 void Dialog::on_blingButton_clicked()
32 {
33 timerT->start(300);
34 m_bShowingMsg = true;
35 ui->blingButton->setEnabled(false);
36 ui->noblingButton->setEnabled(true);
37 }
38
39 void Dialog::on_noblingButton_clicked()
40 {
41 if (timerT->isActive())
42 {
43 timerT->stop();
44 }
45
46 if (timerNoT->isActive())
47 {
48 timerNoT->stop();
49 }
50
51 m_bShowingMsg = false;
52 ui->blingButton->setEnabled(true);
53 ui->noblingButton->setEnabled(false);
54
55 m_systemTray->setIcon(QIcon(":/image/qicon.png"));
56 m_systemTray->show();
57 }
58
59 //刷新托盘图标
60 void Dialog::sltTimerT()
61 {
62 m_systemTray->setIcon(QIcon(":/image/qicon.png"));
63 timerNoT->start(300);
64 if(timerT->isActive())
65 {
66 timerT->stop();
67 }
68 }
69
70 void Dialog::sltTimerNoT()
71 {
72 m_systemTray->setIcon(QIcon(":/image/qicon_no.png"));
73 timerT->start(300);
74 if(timerNoT->isActive())
75 {
76 timerNoT->stop();
77 }
78 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2020-11-10 VTK SetInputData()和 SetInputConnection()替换SetInput()
2020-11-10 VTK二维图像的三维显示
2020-11-10 VtkTransform 和 SetPosition的区别
2020-11-10 Qt QList 遍历元素
2020-11-10 Qt QList详解
2020-11-10 QT QList介绍及应用
2020-11-10 Qt 生成随机区间浮点数 generateRand