当 QSystemTrayIcon 的 showMessage 在 Windows 10 中使用时,应用程序名称及其扩展名显示

Application name is displayed with its extension when QSystemTrayIcon's showMessage is used in Windows 10

我正在使用 QSystemTrayIcon 在 Windows 10 中显示通知。 与通知一起,还会显示应用程序名称。 这里的问题是应用程序名称与扩展名 (.exe) 一起显示。

如何从通知中删除扩展名(.exe)?

尝试将此行添加到您的 .pro 文件中:

QMAKE_TARGET_DESCRIPTION = "Whatever"

它应该将进程名称(在通知和任务管理器中)更改为“Whatever”。

可以在此处找到更多类似的变量:Qmake Variables Documentation

文档注释:

This is only utilized if the VERSION or RC_ICONS variable is set and the RC_FILE and RES_FILE variables are not set.


Step-by-step 创建测试应用程序的说明

  1. 创建 Qt Widgets 应用程序项目,包含一个基于 QWidget 的小部件

  2. 在项目文件夹中创建images目录,将图标文件放入其中(本例设为icon.ico

  3. 向项目添加资源文件

  4. 向该资源文件添加前缀 /,然后“添加文件”,选择 ./images/icon.ico

  5. main.cpp 中将代码更改为以下内容:

    #include "widget.h"
    #include <QApplication>
    #include <QIcon>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication::setApplicationName(APP_NAME);
    
        QApplication a(argc, argv);
        a.setWindowIcon(QIcon(":/images/icon.ico"));
    
        Widget w;
        w.setWindowTitle(qApp->applicationName());
        w.setWindowIcon(qApp->windowIcon());
        w.show();
    
        return a.exec();
    }
  1. widget.cpp 中将代码更改为以下内容:
    #include "widget.h"
    #include "ui_widget.h"
    
    #include <QSystemTrayIcon>
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
    
        QSystemTrayIcon *trayIcon = new QSystemTrayIcon(qApp->windowIcon(), this);
        trayIcon->show();
    
        connect(trayIcon, &QSystemTrayIcon::activated, [=]() {
            trayIcon->showMessage("Title", "Message");
        });
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
  1. 在项目 (.pro) 文件的底部添加以下内容:
    DEFINES +=  APP_NAME=\\"AppName\\"
    
    QMAKE_TARGET_DESCRIPTION = "Whatever"
    
    win32:RC_ICONS += images/icon.ico
  1. 保存,运行qmake(构建->运行qmake),重建项目

  2. 启动应用程序。现在 window 标题应该是“AppName”,它来自 APP_NAME 定义,window 和托盘图标 - icon.ico,以及任务管理器和通知中的进程名称 - “任何”。您可以通过单击托盘图标使应用程序显示通知。通知应如下所示: