如何完全删除 QLayout 的边距(特定于 Mac OS)
Posted
技术标签:
【中文标题】如何完全删除 QLayout 的边距(特定于 Mac OS)【英文标题】:How to remove margins of QLayout completely (Mac OS specific) 【发布时间】:2017-01-03 21:17:35 【问题描述】:让我解释一个简化的情况。在 Qt Creator 中,创建一个包含 QPushButton
的 QHBoxLayout
和另一个包含第二个 QPushButton
的 QHBoxLayout
(即嵌套布局)。如下所示:
QHBoxLayout
s 的四个边距(左、上、右、下)的值为 0。我希望布局的边界(附加图像中的红色矩形)完美地位于两个按钮的边界上,并且两个按钮垂直对齐。然而,从图片中可以看出,情况显然并非如此。第二个按钮比第一个按钮高一点。事实上,将下边距设置在 0 和 8 之间并没有视觉上的差异,下边距仅从 9 个像素开始增长,至少在 Mac OS 上是这样。
对这种行为有什么解释吗?以及如何完全删除边距而不是调用layout->setContentsMargins(0,0,0,0)
?
我知道QStyle::PixelMetric
中的QStyle::PM_LayoutBottomMargin
等,这应该是特定平台上的默认底部边距。但是为什么layout->setContentsMargins(0,0,0,0)
不会覆盖这些值呢?
编辑:我只是在 Windows 上尝试了同样的方法,确实一切都如预期的那样(没有边距)。所以这个问题只能在 Mac OS 上重现。
【问题讨论】:
您指的是 Qt Designer 中的正确方法,还是代码中的正确方法?setContentsMargins(0,0,0,0)
适合代码,否则,使用 Qt Creator 中的属性窗口进行适当的布局,将边距设置为 0。
当我构造同样的东西时,我没有看到这个问题。事实上,我的默认内容边距已经为零。你能发布 .ui 文件吗?
@owacoder,实际上我指的是两者。我通过设置setContentsMargins(0,0,0,0)
在我的代码中发现了这个问题,后来在Qt Designer中尝试了将边距属性设置为0后给出了相同的结果。
@goug 你也在 Mac OS 上工作吗?这种特殊情况可能存在平台差异。根据我在 Mac 上的尝试,即使通过代码或在 Qt Designer 中将其设置为零,下边距也始终至少为 8 像素。我不允许上传文件,但 .ui 就像问题中描述的一样简单。顺便说一句,0 值的边距确实是默认值,但显然 0 值没有效果,如屏幕截图所示。
我在 Windows 上。我没有在家里的 Mac 上设置开发环境。我看到有人发布了错误报告和解决方法,希望对您有所帮助。
【参考方案1】:
此问题仅对 Mac OS 上的某些特定小部件(例如 QPushButton
、QComboBox
等)可见。
在这些小部件上设置Qt::WA_LayoutUsesWidgetRect
attribute 将解决它:
button->setAttribute(Qt::WA_LayoutUsesWidgetRect);
参考:QMacStyle: QPushButtons always have space below when in a QLayout
可以在此处找到具有相同解决方案的相关问题:Why is QHBoxLayout causing widgets to overlap?
【讨论】:
以上是关于如何完全删除 QLayout 的边距(特定于 Mac OS)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Vuetify 中使用断点为不同的屏幕尺寸指定不同的边距