Qt 删除 QVBoxLayout 上的小部件之间的空 space
Qt remove empty space between widgets on QVBoxLayout
我有一个烦人的问题。我创建了 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 但没有任何 space 之间的小部件添加到布局。只是QButtons或其他小部件,相互粘连。
我在各处添加了 setMargins、setSpacing 等。
请帮助我,我真的不知道我该怎么做。
抱歉颜色,但我想提及我想要实现的目标。我有 mainWindow,我在上面添加了 QWidget。这个小部件有蓝色背景。然后在布局中,我添加了一些小部件,这些小部件在这张图片上是橙色的。我只是想确定,小部件之间的这个蓝色背景是不可见的。我想在小部件下有小部件,没有任何 space.
试试这个来实现 "tight" 外观。请注意,如果您调整父小部件的大小,它们将不会移动。不确定这是否是您想要的,但是...
// After all widgets are added to the layout
layout->insertStretch( -1, 1 );
第二个参数需要高于任何其他拉伸因子。拉伸因子默认为零,所以如果你不设置它,上面的一行应该可以工作。
间距永远不会为零?
正如 Qt 文档所说,一些默认的 GUI 小部件周围有额外的框架。
以QPushButton
为例:
In some GUI styles a default button is drawn with an extra frame
around it, up to 3 pixels or more. Qt automatically keeps this space
free around auto-default buttons, i.e. auto-default buttons may have a
slightly larger size hint.
所以罪魁祸首不是布局,而是小部件本身。 "Invisible" 即使布局的间距已设置为 0,默认小部件的边距仍然存在。
灵魂
如果你真的需要一个“紧凑”布局,我的建议是求助于小部件的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)
重置样式表可以使布局更紧凑:
插入默认值 QPushButton
以查看差异:
您可以看到在默认 QPushButton
周围有 space。其他类型的小部件也是如此。
我可能是错的,但似乎没有明显的、非黑客的方法来做你想做的事。但是,根据文档,您可能会发现只需进行手动布局即可解决您的问题。 (http://doc.qt.io/qt-5/layout.html:手动布局)
似乎可以实现布局 class,它实际上提供了非常紧凑的水平或垂直布局,我相信几年前我已经使用 Python 和 Qt 编写了一个布局。考虑到这一点,您应该能够实现自己的 MyCompactLayout(horizontal=True)
并使用它。
我知道这个问题是一年前发布的,但如果它能帮助一些人节省一些时间,我会很高兴。我有同样的问题,并且能够通过设置解决它:
QFrame.setFrameShape()
到 NoFrame
QFrame.setLineWidth()
到 0.
下图是使用所述方法将 2 QtextEdit
并排放置在布局中的结果。
我有一个烦人的问题。我创建了 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 但没有任何 space 之间的小部件添加到布局。只是QButtons或其他小部件,相互粘连。
我在各处添加了 setMargins、setSpacing 等。 请帮助我,我真的不知道我该怎么做。
抱歉颜色,但我想提及我想要实现的目标。我有 mainWindow,我在上面添加了 QWidget。这个小部件有蓝色背景。然后在布局中,我添加了一些小部件,这些小部件在这张图片上是橙色的。我只是想确定,小部件之间的这个蓝色背景是不可见的。我想在小部件下有小部件,没有任何 space.
试试这个来实现 "tight" 外观。请注意,如果您调整父小部件的大小,它们将不会移动。不确定这是否是您想要的,但是...
// After all widgets are added to the layout
layout->insertStretch( -1, 1 );
第二个参数需要高于任何其他拉伸因子。拉伸因子默认为零,所以如果你不设置它,上面的一行应该可以工作。
间距永远不会为零?
正如 Qt 文档所说,一些默认的 GUI 小部件周围有额外的框架。
以QPushButton
为例:
In some GUI styles a default button is drawn with an extra frame around it, up to 3 pixels or more. Qt automatically keeps this space free around auto-default buttons, i.e. auto-default buttons may have a slightly larger size hint.
所以罪魁祸首不是布局,而是小部件本身。 "Invisible" 即使布局的间距已设置为 0,默认小部件的边距仍然存在。
灵魂
如果你真的需要一个“紧凑”布局,我的建议是求助于小部件的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)
重置样式表可以使布局更紧凑:
插入默认值 QPushButton
以查看差异:
您可以看到在默认 QPushButton
周围有 space。其他类型的小部件也是如此。
我可能是错的,但似乎没有明显的、非黑客的方法来做你想做的事。但是,根据文档,您可能会发现只需进行手动布局即可解决您的问题。 (http://doc.qt.io/qt-5/layout.html:手动布局)
似乎可以实现布局 class,它实际上提供了非常紧凑的水平或垂直布局,我相信几年前我已经使用 Python 和 Qt 编写了一个布局。考虑到这一点,您应该能够实现自己的 MyCompactLayout(horizontal=True)
并使用它。
我知道这个问题是一年前发布的,但如果它能帮助一些人节省一些时间,我会很高兴。我有同样的问题,并且能够通过设置解决它:
QFrame.setFrameShape()
到NoFrame
QFrame.setLineWidth()
到 0.
下图是使用所述方法将 2 QtextEdit
并排放置在布局中的结果。