QMessageBox :: critical不显示标题文本

时间:2014-02-20 10:26:07

标签: qt

我需要显示简单的错误消息

QMessageBox::critical(  nullptr, "My Title", "Text");

但是对话框显示为空标题。

我做错了什么?

PS:操作系统:MacOS 10.9.1

3 个答案:

答案 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"));