桌面中的 Qt QMessageBox 中心 'critical'

Qt QMessageBox center 'critical' in desktop

QMessageBox的关键方法有4个被重写的方法,它还有单独的设置标题、消息正文和parent的方法。

我想在桌面中央显示严重错误对话框。我有桌面几何图形,我需要的是消息框的几何图形,这样我就可以将它应用到桌面几何图形上,使错误对话框居中。

但是这是先有鸡还是先有蛋的问题,在定位渲染之前我无法得到错误对话框,请问我该怎么做呢?我不想求助于幻数来应用偏移量。

这应该使对话框在主桌面上居中,但我没有在多屏幕设置上对其进行测试。

 QMessageBox message(QMessageBox::Critical, QObject::tr("Error!"),
                     QObject::tr("This is a critical error!"),
                     QMessageBox::Ok,
                     QApplication::desktop()); 
 message.exec();

编辑 正如用户 Scheff 正确指出的那样,它确实是 QMessageBox 的构造函数之一。该解决方案利用了 Qt 居中对话框的默认行为 w.r.t。父部件。

有时,我发现在某些平台上,提供一个 null parent 不会使对话框在屏幕上居中,因为不同的 window 装饰器可能会采用不同的对话框定位策略。强制桌面小部件成为父级对我来说 100% 地解决了这个问题。

总之,有效果就好:)

实际的解决方案要简单得多,只需从对 critical 的调用中删除父参数就可以达到预期的效果:

    const QString csMsg("\'" + strConfig + "\' does not exist!");
    const QString csTitle("Error");
    QMessageBox msgBox;
    msgBox.critical(nullptr, csTitle, csMsg);
    QApplication::quit();