Qt - 在 macOS 上动态更改应用程序标题 [重复]

Posted

技术标签:

【中文标题】Qt - 在 macOS 上动态更改应用程序标题 [重复]【英文标题】:Qt - Change application title dynamically on macOS [duplicate] 【发布时间】:2021-11-03 20:12:02 【问题描述】:

我想在我的 Qt 5.15.0 应用程序执行后更改它的标题。

为此,我使用 QWidget 类的 setWindowTitle 函数,如下所示:

setWindowTitle("My new window title");

原来标题在 Windows 上正确更改,但在 macOS 上却没有。结果如下:

Windows 10

ma​​cOS Catalina

您可以看到,在 macOS 中,标题在 Window 中更新,但在 MenuBar(顶部)和 Dock(底部)中没有更新。

有没有办法在应用运行后更改 macOS 上的所有标题?


编辑

我设法使用 this question 中发布的 Objective-C 代码更改了 MenuBar 标题(我只需要将我的 .cpp 文件重命名为 .mm):

#import <AppKit/NSApplication.h>
#import <AppKit/NSMenu.h>

void setMenuProgramName(const char* newName)

    NSMenu* mainMenu = [[NSApplication sharedApplication] mainMenu];
    NSMenu* appMenu = [[mainMenu itemAtIndex:0] submenu];
    [appMenu setTitle:[[NSString alloc] initWithUTF8String:newName]];

在 Dock 中更改名称仍然存在问题。 here 和 here 有一些见解,但我还不能让它发挥作用。据说我应该“在支持文件中注释掉 NSApplicationMain -> main.m”,但我没有那个文件,我不知道如何使用 Qt 来做到这一点。这就是为什么我建议重新提出这个问题,因为目前还没有解决方案。


编辑二

显然,正如this response 中所述,当您将鼠标悬停在 Dock 中的应用图标上时,无法更改标题。

或者,您可以使用以下代码添加“徽章”,但这是用于通知的。

[[NSApp dockTile] setBadgeLabel:@"My custom text"]

很高兴知道为什么不能更改 - 如果是因为错误的设计决策或只是开发不佳的框架。

【问题讨论】:

【参考方案1】:

你可以这样:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)

    QString windowTitle("New Title");
    this->setWindowTitle(windowTitle); 

【讨论】:

这就是我正在做的,但它不会改变 Dock 和 MenuBar 中的标题。这就是问题的全部意义所在。

以上是关于Qt - 在 macOS 上动态更改应用程序标题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自制软件在 macOS 上安装 qt4?

如何在 MacOS X 雪豹 (10.6) 上部署 Qt 5.5 C++11 应用程序

Qt 交叉编译 Linux -> MacOS 无法链接到 Qt 库

如何在 Qt 中动态更改标签大小?

MacOS 上的 Qt .nib 问题

更改后,QT QML资源文件不会重新编译