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

时间:2017-01-03 21:17:36

标签: macos qt

让我解释一下简化情况。在Qt Creator中,创建一个QHBoxLayout,其中包含QPushButton,另一个QHBoxLayout包含第二个QPushButton(即嵌套布局)。如下所示: Nested layout

两个QHBoxLayout的四个边距(左,上,右,下)都有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上重现。

1 个答案:

答案 0 :(得分:1)

只有Mac OS上的某些小部件(例如QPushButtonQComboBox等)才能看到此问题。

在这些小部件上设置Qt::WA_LayoutUsesWidgetRect属性可以解决它:

button->setAttribute(Qt::WA_LayoutUsesWidgetRect);

参考:QMacStyle: QPushButtons always have space below when in a QLayout

可以在此处找到相同解决方案的相关问题:Why is QHBoxLayout causing widgets to overlap?