一杯清酒邀明月
天下本无事,庸人扰之而烦耳。

一、效果

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 }

 

posted on 2022-11-10 10:24  一杯清酒邀明月  阅读(897)  评论(0编辑  收藏  举报