2015-01-20 174 views
4

我有恼人的问题。我创建了QVBoxLayout,我在其中添加了我的小部件。 这是从我的构造样本:Qt删除QVBoxLayout上的小部件之间的空白空间

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

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

layout->addWidget(_wave); 

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

我想达到什么目的? Similar like this但没有任何添加到布局的小部件之间的空间。只有QButtons或其他小工具,彼此粘在一起。

我随处添加setMargins,setSpacing等。 请帮助我,我真的不知道该怎么办。

enter image description here

对不起,我的色彩,但我想提到我想达到的目标。我有我添加QWidget的mainWindow。这个小部件有蓝色背景。然后在布局上,我添加了一些小部件,它们在这个图像上是橙色的。我只是想确定一下,widget之间的这个蓝色背景是不可见的。我想在小部件下面有小部件,没有任何空间。

回答

1

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

  • “QFrame.setFrameShape()” 到 “NOFRAME”
  • “QFrame.seLineWidth()” 0

下面的图片是使用描述的方法在布局中并排放置2个“QtextEdit”的结果。

enter image description here

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

+0

我检查了它,它工作。我希望我有过之前(:谢谢! – Tatarinho 2016-11-29 12:12:01

2

试试这样做的“紧”的样子。请注意,如果您调整父级窗口小部件的大小,它们将不会移动。不知道这是否是你想要的,但...

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

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

+0

不完全...我读到(-1,1)在末尾添加拉伸,和1是拉伸的厚度。它真的没有帮助我; /我改变了(-1,0),以确保没有厚度,但它确实没有移动。还有什么想法?它杀了我 – Tatarinho 2015-01-20 19:39:55

+0

你可以显示你有什么和你想要的屏幕截图吗?上面的第二个参数是相对的拉伸因子。如果您调用QLayout :: addWidget(QWidget *),那么该窗口小部件的拉伸因子为0.调用QLayout :: insertStretch(-1,1)意味着布局的末端具有最高的拉伸因子,只有拉伸因子会拉伸。 – 2015-01-20 19:42:41

+0

你什么时候调用setSpacing(0)?我在QGridLayout上调用了它,并且我的小部件都相互堆叠在一起。 – 2015-01-20 19:47:28

1

间距从不为零?

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

QPushButton为例:

在一些GUI样式的默认按钮与一个额外帧 周围至多3个像素以上绘制。 Qt自动保持这个空间 免费的自动默认按钮,即自动默认按钮可能会有一个更大的尺寸提示 。

所以罪魁祸首不是布局,而是部件本身。 “隐形”默认控件的利润率仍然即使布局的间距被设定为0。

Soultion

如果你真的需要一个“紧凑”的布局,我的建议是诉诸小部件的stylesheet


实例

下面是实施例以说明的想法:

在此,我们有一个垂直布局与两个裕度和间距等于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) 

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

enter image description here

插入默认QPushButton看出区别:

enter image description here

你可以看到周围有默认QPushButton空间。对于其他类型的小部件也是如此。

0

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

看起来好像人们可以实现一个布局类,它实际上提供了一个非常紧凑的水平或垂直布局,我相信我几年前已经使用Python和Qt编写了一个。考虑到这一点,你应该能够实现自己的MyCompactLayout(horizontal=True)并使用它。