Let me explain a simplified situation. In Qt Creator, create a QHBoxLayout
containing a QPushButton
and another QHBoxLayout
which contains a second QPushButton
(i.e. nested layout). As demonstrated below:
Both QHBoxLayout
s 的四个边距(左、上、右、下)的值为 0。我希望布局的边框(附图中的红色矩形)完美地位于两个按钮的边框上,并且两个按钮完全垂直对齐。然而,从图像中可以看出,情况显然并非如此。第二个按钮比第一个按钮高一点。事实上,将底部边距设置在 0 和 8 之间没有视觉差异,底部边距仅从 9 像素开始增长,至少在 Mac OS 上是这样。
对这种行为有什么解释吗?以及如何完全删除边距而不是调用layout->setContentsMargins(0,0,0,0)
?
我知道QStyle::PM_LayoutBottomMargin
等在QStyle::PixelMetric
,这应该是特定平台上的默认底部边距。但为什么这些值不会被覆盖layout->setContentsMargins(0,0,0,0)
?
编辑:我刚刚在 Windows 上尝试了相同的操作,实际上一切都符合预期(没有边距)。所以这个问题只能在 Mac OS 上重现。
此问题仅对某些特定小部件可见(例如QPushButton
, QComboBox
等)在 Mac 操作系统上。
Setting Qt::WA_LayoutUsesWidgetRect
这些小部件上的属性可以解决这个问题:
button->setAttribute(Qt::WA_LayoutUsesWidgetRect);
参考:QMacStyle:在 QLayout 中时,QPushButtons 下方始终有空间 https://bugreports.qt.io/browse/QTBUG-2699
可以在这里找到具有相同解决方案的相关问题:为什么 QHBoxLayout 会导致小部件重叠? https://stackoverflow.com/questions/3978889/why-is-qhboxlayout-causing-widgets-to-overlap
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)