我需要显示简单的错误消息
QMessageBox::critical( nullptr, "My Title", "Text");
但是对话框显示为空标题。
我做错了什么?
PS:操作系统:MacOS 10.9.1
答案 0 :(得分:8)
OS X人机界面指南确实说警报对话框没有标题。然而,这不是整个故事。
首先,有NSAlert::alertWithMessageText功能,它仍然支持显示标题。
此外,在Apple's own HI Guidelines page上,在“关于Windows”部分下,它表示“关于”窗口“标题栏没有标题”。然而,正好在该声明之上,来自Finder的关于框的示例图片非常明显地具有标题,其中写着“关于Finder”,并且实际上,关于实际上的关于框具有标题单击“关于Finder。”
因此,Apple在这方面的指导方针是矛盾的。
因此,在我看来,在警告对话框中显示窗口标题并没有什么坏事。 (指南中没有任何内容表明你无法创建一个任意模态窗口,它恰好有一个标题,一个自定义图标,一些静态文本和一个OK按钮。)
用“海盗法典”一词来解释巴博萨船长,人机界面指南就是这样;他们比实际规则更“准则”。
无论如何,以下是如何在Mac上的QMessageBox中显示标题:
QMessageBox msgBox("", "Text", QMessageBox::Critical, 0, 0, 0, nullptr, Qt::WindowTitleHint | Qt::WindowSystemMenuHint);
msgBox.QDialog::setWindowTitle("My Title");
msgBox.exec();
我也在我的应用程序中调用了msgBox.setAttribute(Qt :: WA_MacFrameworkScaled),它使用的是较旧版本的Qt,默认情况下不想支持QMessageBox中的高分辨率Retina显示。
另一方面,在Mac上有一些情况,其中一个工作表模式对话框(没有标题栏)更合适,Qt通过调用QWidget :: setWindowModality(Qt :: WindowModal)来支持这个,显然是非需要null父窗口。
答案 1 :(得分:7)
你没有做错任何事。来自QMessageBox::setWindowTitle
文档:
将消息框的标题设置为标题。在 Mac OS X 上,窗口 标题被忽略(根据Mac OS X指南的要求)。
答案 2 :(得分:0)
这在Qt-5.12.1和OSX-10.14.4中对我有效:
QMessageBox msgBox("", "Text", QMessageBox::Critical, 0, 0, 0, this, Qt::WindowTitleHint | Qt::WindowSystemMenuHint);
static_cast<QWidget*>(&msgBox)->setWindowTitle(tr("Window title"));