基于QT5的系统状态栏托盘图标Demo程序,适用于UOS、Windows。
首先将图标文件复制到项目根目录下:
右键 项目,点击Add New
选择 Qt,Qt Resource File 点击Choose
命名为 icon
,点击下一步,直到完成。
该步骤完成后会向
helloworld.pro
文件中添加RESOURCES
配置信息。
完成后项目目录中会增加一个Resources目录,右键点击该目录,点击添加现有文件 选择我们的icon文件并点击打开。
可以看到我们文件位于/
目录下,在需要使用到该资源的地方通过:/文件名
的形式就可以取到文件路径,如::/icon.png
本次只需要显示系统状态栏图标仅需使用libqtwidget
相关API,我们采用简单的一个main函数来完成所有功能,因此那其他文件都给删除。
修改后的helloworld.pro内容如下所示:
QT += widgets
CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp
HEADERS += \
RESOURCES += \
icon.qrc
由于没有其他的文件所以头文件这边也为空,修改保存之后,项目会自动更新项目结构。
此时项目中只有main.cpp
和资源文件。
main.cpp程序如下:
#include <QApplication>
#include <QMenu>
#include <QProcess>
#include <QSystemTrayIcon>
#include <QtGlobal>
#include <QDesktopServices>
#include <QUrl>
QSystemTrayIcon *trayIcon;
// 打开点击事件处理器
void handleOpen(){
qDebug(">> Open button clicked!");
QDesktopServices::openUrl(QUrl("http://www.baidu.com"));
}
void handleQuit(){
trayIcon->hide();
QCoreApplication::quit();
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建右键菜单
QMenu menu;
QAction openAct("打开");
QAction quitAct("退出");
menu.addAction(&openAct);
menu.addAction(&quitAct);
// 菜单绑定事件回调
QObject::connect(&quitAct, &QAction::triggered, qApp, &handleQuit);
QObject::connect(&openAct, &QAction::triggered, qApp, &handleOpen);
// 加载图标
QPixmap oPixmap(32, 32);
oPixmap.load(":/icon.png");
QIcon qIcon(oPixmap);
// 创建并配置状态栏icon
trayIcon = new QSystemTrayIcon(qIcon);
trayIcon->setContextMenu(&menu);
trayIcon->setToolTip("Some thing");
trayIcon->setVisible(true);
// 消息提示
// trayIcon->showMessage("Test Message", "Text", QSystemTrayIcon::Information, 3000);
return a.exec();
}
- 创建右键菜单,并注册并绑定事件处理器。
- 加载图标。
- 创建系统状态栏对象并配置。
完成编写后启动运行程序,可以在右下角看到程序启动的系统状态栏图标,对图标点击右键可以弹出菜单。
[1]. github . QtExamples . XMuli . https://github.com/xmuli/QtExamples