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

Macos 如何完全删除QLayout的边距(特定于Mac OS),macos,qt,Macos,Qt,让我解释一个简单的情况。在Qt Creator中,创建一个包含QPushButton的QHBoxLayout和另一个包含第二个QPushButton的QHBoxLayout,即嵌套布局。如下所示: 两个QHBoxLayouts的四个页边距(左、上、右、下)的值均为0。我希望附加图像中的红色矩形的边框完全位于两个按钮的边框上,并且两个按钮完全垂直对齐。然而,从图中可以看出,情况显然并非如此。第二个按钮比第一个按钮高一点。事实上,将底部边距设置在0和8之间没有视觉差异,底部边距仅从9像素开始增长,

让我解释一个简单的情况。在Qt Creator中,创建一个包含QPushButton的QHBoxLayout和另一个包含第二个QPushButton的QHBoxLayout,即嵌套布局。如下所示:

两个QHBoxLayouts的四个页边距(左、上、右、下)的值均为0。我希望附加图像中的红色矩形的边框完全位于两个按钮的边框上,并且两个按钮完全垂直对齐。然而,从图中可以看出,情况显然并非如此。第二个按钮比第一个按钮高一点。事实上,将底部边距设置在0和8之间没有视觉差异,底部边距仅从9像素开始增长,至少在Mac OS上是这样

对这种行为有何解释?如何完全删除边距而不是调用layout->setContentsMargins0,0,0,0

我知道QStyle::PixelMetric中的QStyle::PM_LayoutBottomMargin等,它应该是特定平台上的默认底部边距。但是为什么这些值不会被layout->setContentsMargins0,0,0,0覆盖呢


编辑:我刚刚在Windows上尝试了同样的方法,事实上一切都如预期的那样,没有边距。所以这个问题只能在Mac OS上重现。

这个问题只在Mac OS上的几个特定小部件上可见,例如QPushButton、QComboBox等

在这些小部件上设置Qt::WA_layoutuseSwidgetRecAttribute可以解决这个问题:

button->setAttribute(Qt::WA_LayoutUsesWidgetRect);
参考:


在这里可以找到与相同解决方案相关的问题:

此问题仅在Mac OS上的几个特定小部件上可见,例如QPushButton、QComboBox等

在这些小部件上设置Qt::WA_layoutuseSwidgetRecAttribute可以解决这个问题:

button->setAttribute(Qt::WA_LayoutUsesWidgetRect);
参考:


这里可以找到与相同解决方案相关的问题:

您是指Qt Designer中的正确方法还是代码中的正确方法?setContentsMargins0,0,0,0适用于代码,否则,请使用Qt Creator中的“属性”窗口为适当的布局将页边距设置为0。在构造相同的内容时,我看不到此问题。事实上,我的默认内容边距已经为零。你能发布.ui文件吗?@owacoder,实际上我指的是两者。我通过设置setContentsMargins0,0,0,0在代码中发现了这个问题,后来在Qt Designer中进行了尝试,在将边距属性设置为0后得到了相同的结果。@goug您也在使用Mac OS吗?对于这种特殊情况,可能存在平台差异。根据我在Mac上的尝试,即使在代码或Qt Designer中将其设置为零后,底部边距始终至少为8像素。我不允许上传文件,但是.ui就像问题中描述的一样简单。顺便说一句,0值的边距确实是默认值,但很明显,0值没有效果,如屏幕截图所示。我在Windows上。我在家里的Mac电脑上没有设置开发环境。我看到有人发布了一个bug报告和一个解决方案,希望这能对您有所帮助。您是指Qt设计器中的正确方法,还是代码中的正确方法?setContentsMargins0,0,0,0适用于代码,否则,请使用Qt Creator中的“属性”窗口为适当的布局将页边距设置为0。在构造相同的内容时,我看不到此问题。事实上,我的默认内容边距已经为零。你能发布.ui文件吗?@owacoder,实际上我指的是两者。我通过设置setContentsMargins0,0,0,0在代码中发现了这个问题,后来在Qt Designer中进行了尝试,在将边距属性设置为0后得到了相同的结果。@goug您也在使用Mac OS吗?对于这种特殊情况,可能存在平台差异。根据我在Mac上的尝试,即使在代码或Qt Designer中将其设置为零后,底部边距始终至少为8像素。我不允许上传文件,但是.ui就像问题中描述的一样简单。顺便说一句,0值的边距确实是默认值,但很明显,0值没有效果,如屏幕截图所示。我在Windows上。我在家里的Mac电脑上没有设置开发环境。我看到有人发布了一个bug报告和一个解决方案,所以希望这能对您有所帮助。