QT 托盘

布满荆棘的人生 2022-09-22 11:44 426阅读 0赞









1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27


28


29


30


31



#include <QtGui>


 


class 
myclass: 
public 
QWidget


{


public
:


    
myclass();


private
:


    
QSystemTrayIcon trayIcon;


};


 


myclass::myclass()


{


    
QIcon icon = QIcon(
“:/logo.png”
);


    
trayIcon = 
new 
QSystemTrayIcon(
this
);


    
trayIcon->setIcon(icon);


    
trayIcon->setToolTip(tr(
“子曰USay”
));


    
QString titlec=tr(
“子曰USay”
);


    
QString textc=tr(
“子曰USay:给你神一般的体验”
);


    
trayIcon->show();


    
trayIcon->showMessage(titlec,textc,QSystemTrayIcon::Information,5000);


}


 


int 
main(
int 
argc,
char 
*
argv)


{


    
QApplication testc(argc,argv);


 


    
myclass newc;


    
newc.show();


 


    
return 
testc.exec();


}

接下来,添加一些代码,使托盘能够响应鼠标的单机双击时间,并且用鼠标右键单击托盘图标时,能够弹出操作菜单,并执行相应的操作,效果如下:

472309f7905298223c64e3cdd6ca7bcb0a46d46d.jpg_referer_1d2914ccb31193139e54ca801423_x_.jpg

Qt实现托盘程序

实现起来非常简单,main函数没有什么变化,myclass类如下:










1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27


28


29


30


31


32


33


34


35


36


37


38


39


40


41


42


43


44


45


46


47


48


49


50


51


52


53


54


55


56


57


58


59


60


61


62


63


64


65


66



class 
myclass: 
public 
QWidget


{


public
:


    
myclass();


private
:


    
QSystemTrayIcon trayIcon;


    
QAction
minimizeAction;


    
QAction restoreAction;


    
QAction
quitAction;


    
QMenu   *trayIconMenu;


 


private 
slots:


    
void 
trayiconActivated(QSystemTrayIcon::ActivationReason reason);


 


};


 


myclass::myclass()


{


    
//创建托盘图标


    
QIcon icon = QIcon(
“:/logo.png”
);


    
trayIcon = 
new 
QSystemTrayIcon(
this
);


    
trayIcon->setIcon(icon);


    
trayIcon->setToolTip(tr(
“子曰USay”
));


    
QString titlec=tr(
“子曰USay”
);


    
QString textc=tr(
“子曰USay:给你神一般的体验”
);


    
trayIcon->show();


 


    
//弹出气泡提示


    
trayIcon->showMessage(titlec,textc,QSystemTrayIcon::Information,5000);


 


    
//添加单/双击鼠标相应


    
connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),


            
this
,SLOT(trayiconActivated(QSystemTrayIcon::ActivationReason)));


 


    
//创建监听行为


    
minimizeAction = 
new 
QAction(tr(
“最小化 (&I)”
), 
this
);


    
connect(minimizeAction, SIGNAL(triggered()), 
this
, SLOT(hide()));


    
restoreAction = 
new 
QAction(tr(
“还原 (&R)”
), 
this
);


    
connect(restoreAction, SIGNAL(triggered()), 
this
, SLOT(showNormal()));


    
quitAction = 
new 
QAction(tr(
“退出 (&Q)”
), 
this
);


    
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));


 


    
//创建右键弹出菜单


    
trayIconMenu = 
new 
QMenu(
this
);


    
trayIconMenu->addAction(minimizeAction);


    
trayIconMenu->addAction(restoreAction);


    
trayIconMenu->addSeparator();


    
trayIconMenu->addAction(quitAction);


    
trayIcon->setContextMenu(trayIconMenu);


}


 


void 
myclass::trayiconActivated(QSystemTrayIcon::ActivationReason reason)


{


    
switch 
(reason)


    
{


    
case 
QSystemTrayIcon::Trigger:


        
//单击托盘图标


    
case 
QSystemTrayIcon::DoubleClick:


        
//双击托盘图标


        
this
->showNormal();


        
this
->
raise
();


        
break
;


    
default
:


        
break
;


    
}


}

至此,大

发表评论

表情:
评论列表 (有 0 条评论,426人围观)

还没有评论,来说两句吧...

相关阅读

    相关 swing 托盘

    参考文章:[swing 托盘][swing] [JFrame实现系统托盘功能缩放在任务栏,窗体图标自定义][JFrame] [swing 最小化成托盘][swing 1]

    相关 QT托盘消息模拟QQ消息通知

    使用QQ时,当有消息过来时,托盘的图标一闪一闪的,鼠标悬浮时出现消息通知列表,显示名字和数量,Qt有自带的消息托盘,那没有鼠标悬浮事件,这里通知定时器查找鼠标的坐标,在托盘范围

    相关 C++刷新托盘程序

    项目中需要重启一个托盘程序。但是重启之后,任务栏的托盘程序图标增加了一个,原来的图标并没有消失。 原来任务栏的托盘程序图标,当鼠标在上面移动过之后才会刷新。所以一个解决办法