9

我有烦人的问题。我创建了 QVBoxLayout,在其上添加了我的小部件。这是我的构造函数的示例:

layout = new QVBoxLayout;
layout->setMargin(0);
layout->setContentsMargins(QMargins(0,0,0,0));
layout->setSpacing(0);

然后我有添加小部件的功能。

layout->addWidget(_wave);

_wave 是我自己的小部件。但是你可以添加任何你想要的东西,例如 QButton。

我想要实现什么? 与此类似,但在布局中添加的小部件之间没有任何空格。只是 QButtons 或其他小部件,彼此粘在一起。

我在任何地方都添加了 setMargins、setSpacing 等。请帮帮我,我真的不知道我该怎么做。

在此处输入图像描述

对不起颜色,但我想提到我想要实现的目标。我有在其上添加 QWidget 的 mainWindow。这个小部件有蓝色背景。然后在布局中,我添加了一些小部件,这些小部件在这张图片上是橙色的。我只是想确定,小部件之间的蓝色背景是不可见的。我想在小部件下有小部件,没有任何空间。

4

4 回答 4

5

我知道这个问题是在一年前发布的,但如果它可以帮助一些人节省一些时间,我会很高兴。我有同样的问题,并能够通过设置解决它:

  • QFrame.setFrameShape()NoFrame
  • QFrame.setLineWidth()为 0。

下图是使用上述方法将 2 个QtextEdit并排放置在布局中的结果。

在此处输入图像描述

http://doc.qt.io/qt-5/qframe.html#lineWidth-prop

于 2016-07-29T12:39:18.067 回答
3

试试这个以获得“紧”的外观。请注意,如果您调整父小部件的大小,它们将不会移动。不确定这是否是您想要的,但是...

// After all widgets are added to the layout
layout->insertStretch( -1, 1 );

第二个参数需要高于任何其他拉伸因子。拉伸因子默认为零,所以如果你不设置它,上面的单线应该可以工作。

于 2015-01-20T19:03:40.217 回答
2

间距从不为零?

正如 Qt 文档所说,一些默认的 GUI 小部件周围有额外的框架。

QPushButton个例子:

在某些 GUI 样式中,默认按钮的绘制周围有一个额外的框架最多 3 个像素或更多。Qt 自动保持自动默认按钮周围的空间空闲,即自动默认按钮可能有一个稍大的尺寸提示。

所以罪魁祸首不是布局,而是小部件本身。即使布局的间距已设置为 0,默认小部件的“不可见”边距仍然存在。

灵魂

如果你真的需要一个“紧凑”的布局,我的建议是使用小部件的样式表


例子

这里有一些例子来说明这个想法:

在这里,我们有一个边距和间距都等于 0 的垂直布局,以及带有自定义样式表的按钮:

 QPushButton {
     border: 2px solid #8f8f91;
     border-radius: 6px;
     background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                                       stop: 0 #f6f7fa, stop: 1 #dadbde);
     min-width: 80px;
 }

// (further stylesheet for button click is needed)

重置样式表允许我们使布局更紧凑:

在此处输入图像描述

插入默认值QPushButton以查看差异:

在此处输入图像描述

您可以看到 default 周围有空格QPushButton。其他类型的小部件也是如此。

于 2015-01-21T05:07:35.270 回答
1

我可能是错的,但似乎没有一种明显和非黑客的方式来做你想做的事。但是,根据文档,您可能会发现只需进行手动布局即可解决您的问题。(http://doc.qt.io/qt-5/layout.html:手动布局)

似乎可以实现一个 Layout 类,它实际上提供了一个非常紧凑的水平或垂直布局,我相信我在几年前使用 Python 和 Qt 编写了一个。考虑到这一点,您应该能够实现自己的MyCompactLayout(horizontal=True)并使用它。

于 2016-04-01T16:51:25.267 回答