如何完全删除 QLayout 的边距(特定于 Mac OS)

2024-04-23

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: Nested layout

Both QHBoxLayouts 的四个边距(左、上、右、下)的值为 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(使用前将#替换为@)

如何完全删除 QLayout 的边距(特定于 Mac OS) 的相关文章

随机推荐