Skip to content

基于QT5的系统状态栏托盘图标Demo程序,适用于UOS、Windows等,Qt system tray icon demo

Notifications You must be signed in to change notification settings

Trisia/qt5systray

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Qt5 Systray

基于QT5的系统状态栏托盘图标Demo程序,适用于UOS、Windows。

1. 增加图标资源文件

这次Demo使用的图标如下: 在这里插入图片描述

首先将图标文件复制到项目根目录下:

在这里插入图片描述

右键 项目,点击Add New 在这里插入图片描述 选择 QtQt Resource File 点击Choose 在这里插入图片描述 命名为 icon,点击下一步,直到完成。 在这里插入图片描述 在这里插入图片描述

该步骤完成后会向helloworld.pro文件中添加RESOURCES 配置信息。

完成后项目目录中会增加一个Resources目录,右键点击该目录,点击添加现有文件 在这里插入图片描述 选择我们的icon文件并点击打开。 在这里插入图片描述

可以看到我们文件位于/目录下,在需要使用到该资源的地方通过:/文件名的形式就可以取到文件路径,如::/icon.png

2. 修改配置文件

本次只需要显示系统状态栏图标仅需使用libqtwidget相关API,我们采用简单的一个main函数来完成所有功能,因此那其他文件都给删除。

修改后的helloworld.pro内容如下所示:

QT       += widgets

CONFIG += c++11

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
    main.cpp

HEADERS += \

RESOURCES += \
    icon.qrc

由于没有其他的文件所以头文件这边也为空,修改保存之后,项目会自动更新项目结构。 在这里插入图片描述

此时项目中只有main.cpp和资源文件。

3 程序主体

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. 创建右键菜单,并注册并绑定事件处理器。
  2. 加载图标。
  3. 创建系统状态栏对象并配置。

完成编写后启动运行程序,可以在右下角看到程序启动的系统状态栏图标,对图标点击右键可以弹出菜单。

在这里插入图片描述 点击打开,可以在控制台看到回调函数打印信息。

在这里插入图片描述

参考文献

[1]. github . QtExamples . XMuli . https://github.com/xmuli/QtExamples

[2]. stackoverflow . How to write QT system tray app without a window class, and integrate it with another process? . Kevin Krammer . 2017.01 . https://stackoverflow.com/questions/41780618/how-to-write-qt-system-tray-app-without-a-window-class-and-integrate-it-with-an

[3]. C语言中文网 . Qt教程 . http://c.biancheng.net/qt/

About

基于QT5的系统状态栏托盘图标Demo程序,适用于UOS、Windows等,Qt system tray icon demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published