编辑:这个应用程序将在Windows,Mac和各种Linux发行版上运行.我知道Linux有这方面的问题,但是Windows呢?苹果电脑?
有没有办法获得正常窗口的框架宽度,在显示任何窗口之前?呈现出窗口后,我知道我可以减去size()从frameSize(),但这并不直到所示的窗口后,工作.
我看过了QApplication::style()->pixelMetric(),我可以使用标题栏的高度
QApplication::style()->pixelMetric(QStyle::PM_TitleBarHeight)
Run Code Online (Sandbox Code Playgroud)
但我没有看到任何选项来获得窗口周围其余边框的宽度.
到目前为止我找到的唯一解决方案是:
size()从frameSize()有没有更好的办法?
我在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);
Run Code Online (Sandbox Code Playgroud)
我只在Windows XP和Qt 4.8.x上测试过这段代码.希望它也可以在其他平台上运行.
如果您还没有看到过,Qt 文档页面“窗口和对话框小部件”包含大量相关信息。
你没有说你在什么平台上运行,但它是X11,答案似乎是“不”,没有更好的方法:
X11特点
在 X11 上,窗口在窗口管理器装饰之前没有框架。这会在调用 QWidget::show() 和窗口接收到的第一个绘制事件之后的某个时间点异步发生,或者根本不会发生。请记住,X11 是无策略的(其他人称之为灵活)。因此,您无法对窗户将获得的装饰框架做出任何安全的假设。基本规则:总会有一个用户使用的窗口管理器打破了您的假设,并且会向您抱怨。
(我喜欢你将不透明度设置为 0 的解决方法:简洁!)
| 归档时间: |
|
| 查看次数: |
8564 次 |
| 最近记录: |