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
macOS 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 X 雪豹 (10.6) 上部署 Qt 5.5 C++11 应用程序