编辑:此应用程序将在 Windows、Mac 和各种 Linux 发行版上运行。我知道 Linux 有这方面的问题,但是 Windows 呢?麦克?
在显示任何窗口之前,是否有任何方法可以获取普通窗口的框架宽度?显示一个窗口后,我知道我可以从 frameSize()
中减去 size()
,但这在显示窗口之前不起作用。
我查看了 QApplication::style()->pixelMetric()
,我可以使用以下方法获取标题栏的高度
QApplication::style()->pixelMetric(QStyle::PM_TitleBarHeight)
但我没有看到任何选项来获取窗口周围其余边框的宽度。
到目前为止我找到的唯一解决方案是:
- 将窗口不透明度设置为 0(这样用户就看不到它),
- 显示窗口
- 然后从
frameSize()
中减去size()
有没有更好的办法?
最佳答案
我在 StackOverflow 的另一个问题中发布了一个建议的解决方案,但我也会在这里发布。您可以在显示窗口之前将窗口移动到屏幕之外的某个地方,然后查询它的几何形状,最后将它移动到您想要的位置(如果那是您需要几何形状的地方)。例如,要使主窗口在主屏幕上居中而不闪烁,我会执行以下操作:
MainWindow mainWindow;
QRect primaryScreenGeometry(QApplication::desktop()->screenGeometry());
mainWindow.move(-50000,-50000);
mainWindow.show();
mainWindow.move((primaryScreenGeometry.width() - mainWindow.width()) / 2.0,
(primaryScreenGeometry.height() - mainWindow.height()) / 2.0);
我只在 Windows XP 和 Qt 4.8.x 上测试过这段代码。希望它也适用于其他平台。
关于c++ - 在创建任何窗口之前如何获得窗口框架的宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7408082/