c++ - 在创建任何窗口之前如何获得窗口框架的宽度?

标签 c++ qt

编辑:此应用程序将在 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/

相关文章:

c++ - “class classname* funcname(void) ”在C++中是什么意思?

python - 让 PyQt4 在按下按钮时打开另一个 Qt 窗口

html - Qt 正则表达式匹配 HTML 标签 InnerText

c++ - 如何以编程方式将 Qt 小部件(QPushButton、QTextEdit、QLabel)添加到 Qt Designer 布局?

c++ - 尽管使用 stop() QMediaPlayer 样本重叠

c++ - QGraphicsScene.itemAt() 只返回零,整个场景很慢

c++ - 将 QML 事件传播到 C++

c++ - FreeRTOS+STM32F4+CPP调用vTaskDelay时卡住

c++ - 因为 std::swap(s1, s2) 就足够了,所以 string::swap 可以忽略吗?

c++ - clang-format 显示哪种样式选项应用于代码