Qt QMessageBox::critical不显示标题文本

Qt QMessageBox::critical不显示标题文本,qt,Qt,我需要显示简单的错误消息 QMessageBox::critical( nullptr, "My Title", "Text"); 但对话框显示为空标题 我做错了什么 PS:OS:MacOS 10.9.1你没有做错什么。从QMessageBox::setWindowTitle文档: 将消息框的标题设置为title。在Mac OS X上,窗口 根据Mac OS X指南的要求,标题被忽略 的确,OSX人机界面指南说警报对话框应该没有标题。然而,这并不是全部 首先,还有一个函数,它仍然支持显示标题

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

QMessageBox::critical(  nullptr, "My Title", "Text");
但对话框显示为空标题

我做错了什么


PS:OS:MacOS 10.9.1

你没有做错什么。从QMessageBox::setWindowTitle文档:

将消息框的标题设置为title。在Mac OS X上,窗口 根据Mac OS X指南的要求,标题被忽略


的确,OSX人机界面指南说警报对话框应该没有标题。然而,这并不是全部

首先,还有一个函数,它仍然支持显示标题

另外,在上的“关于窗口”部分下,它指出“关于”窗口有一个没有标题的标题栏。然而,就在这句话的正上方,来自Finder的About框的示例图片很明显有一个标题,上面写着About Finder,事实上,当您单击About Finder时,About框确实有一个标题

因此,苹果自己在这方面的指导方针是相互矛盾的

因此,在我看来,在警报对话框中显示窗口标题并没有什么不好的。指南中也没有规定不能创建一个任意的模式窗口,该窗口恰好有一个标题、一个自定义图标、一点静态文本和一个OK按钮

用巴伯萨船长的话说,就像海盗代码一样,人机界面指南就是这样;它们更多的是指导原则,而不是实际规则

无论如何,以下是如何在Mac上获得标题以显示在QMessageBox中:

QMessageBox msgBox("", "Text", QMessageBox::Critical, 0, 0, 0, nullptr, Qt::WindowTitleHint | Qt::WindowSystemMenuHint);
msgBox.QDialog::setWindowTitle("My Title");
msgBox.exec();
我也在我的应用程序中调用msgBox.setAttributeQt::WA_MacFrameworkScaled,它使用的是稍旧的Qt版本,默认情况下不支持QMessageBox中的高分辨率视网膜显示


另一方面,Mac上的某些情况下,不带标题栏的工作表模式对话框更合适,Qt通过调用QWidget::setWindowModalityQt::WindowModal来支持这一点,显然需要一个非空的父窗口。

这在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"));

你能发布这个对话框的截图吗?是不是对话框太小了,在Win7上显示标题,我只看到我的…,其余的被标题栏按钮隐藏了?你能试着用更长的消息文本使对话框变大吗?如果忽略这个标题,我想应该显示应用程序标题,不是吗?不,根据警报部分中的,警报对话框应该没有标题。