让我解释一下简化情况。在Qt Creator中,创建一个QHBoxLayout
,其中包含QPushButton
,另一个QHBoxLayout
包含第二个QPushButton
(即嵌套布局)。如下所示:
两个QHBoxLayout
的四个边距(左,上,右,下)都有0个值。我希望布局的边框(附图中的红色矩形)完美地位于两个按钮的边框上,两个按钮完全对齐。然而,从图像中可以看出,情况显然不是这样。第二个按钮比第一个按钮略高。事实上,将底部边距设置在0到8之间没有视觉差异,底部边距仅从9像素增长,至少在Mac OS上是这样。
对此行为的任何解释?如何完全删除边距而不是调用layout->setContentsMargins(0,0,0,0)
?
我知道QStyle::PM_LayoutBottomMargin
中的QStyle::PixelMetric
等,它应该是特定平台上的默认底部边距。但为什么这些值不会被layout->setContentsMargins(0,0,0,0)
覆盖?
答案 0 :(得分:1)
只有Mac OS上的某些小部件(例如QPushButton
,QComboBox
等)才能看到此问题。
在这些小部件上设置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?