QVBoxLayout中小部件之间的空格

时间:2013-05-15 18:22:42

标签: qt spacing

我正在尝试使用Qt5.0.1创建一个登录表单。我创建了两个小部件,我将标签和行编辑放在其中一个中,而我的按钮放在另一个中。然后我将这两个小部件放在QVBoxLayout中,但布局中两个小部件之间的空间不仅仅是用途。我尝试了setSpacing和setContentsMargin,但它们不能用于此程序。

vhandle->setSpacing(0);
vhandle->setMargin(0);
vhandle->setContentsMargins(0,0,0,0);
vhandle->addWidget(handle,0, Qt::AlignTop);
vhandle->addWidget(handle2,0, Qt::AlignTop);

但两个小部件之间的空间没有任何变化:

http://i.stack.imgur.com/R33MM.png

我该怎么办?

2 个答案:

答案 0 :(得分:14)

问题不是QVboxLayout的边距设置,而是容器小部件布局的边距设置以及QVBoxLayout的间距设置。你已经将间距设置为0,这应该没问题。另外,假设upperWidgetLayout是上部窗口小部件的布局,lowerWidgetLayout是下部窗口小部件的布局,请尝试

upperWidgetLayout->setContentsMargins(-1, -1, -1, 0);
lowerWidgetLayout->setContentsMargin(-1, 0, -1, -1);

这会将上部窗口小部件布局的下边距和下部窗口小部件布局的上边距设置为0,这样两个窗口小部件的内容之间就没有空格:

Dialog Layout

暂时着色各种小部件通常是追踪此类问题的好方法。您还可以使用Qt Designer设计UI,并查看正在生成的源代码(或直接在项目中使用.ui文件)。

答案 1 :(得分:0)

可以通过在顶部设置对齐方式来删除小部件或布局之间的多余空间,例如:

self.layout_scrollarea_v=QVBoxLayout(self.frame)
self.layout_scrollarea_v.setAlignment(Qt.AlignTop)
self.layout_scrollarea_v.addLayout(self.layout_scrollarea_h1)
self.layout_scrollarea_v.addLayout(self.layout_scrollarea_h3)
self.layout_scrollarea_v.addLayout(self.layout_scrollarea_h2)

在您的代码中使用

vhandle->setAlignment(Qt::AlignTop)