我有以下代码:
QWidget w(nullptr, Qt::Tool | Qt::WindowTitleHint | Qt::WindowMinimizeButtonHint);
w.setGeometry(9, 60, 475, 223);
w.show();
auto rect = w.geometry();
变量rect
与我设置(9, 60, 475, 223)
的值相同,但在我的桌面上显示窗口之前,我得到一个moveEvent(QMoveEvent *event)
,其中y
坐标获得的功能相同geometry()
1}}成为88
。
正如你所看到的那样,这个窗口没有父级(实际上我认为在这种情况下我的桌面是它的父母,无论如何我觉得它是无关紧要的)我正在使用geometry()
函数和不是frameGeometry()
。对于frameGeometry
,由于窗口标题栏,我希望坐标不同。
我的问题是:为什么会这样?这28(88-60)值来自哪里?我可以认为它不变吗?
我尝试了什么: w.setSizePolicy(QSizePolicy::Policy::MinimumExpanding,QSizePolicy::Policy::MinimumExpanding);
但没有任何改变
w.move(QPoint) w.resize(QSize);
没有结果
我设置了一个按钮,然后单击我重置几何w.setGeometry(9, 60, 475, 223);
,窗口重新定位在所需的坐标处(不再是+28位移)
修改
问题2:这28(88-60)值从何而来?
答案:我发现这28个像素实际上是统一顶栏的高度
问题3:我可以认为它不变吗?
答案:否。此尺寸可由用户修改。这实际上就是我找到这个值的方式。
剩余问题:为什么会发生这种情况?为什么这只是针对第一次setGeometry()
通话而不是每次通话(阅读我尝试过的最后一件事)?