我编写了一个程序,它使用小部件作为容器(用于其他小部件)。由于容器的内容随着程序生命周期而变化,因此容器窗口小部件具有与之关联的布局,因此它可以正确调整大小。 问题是容器似乎占用了一些空间。
在下面的程序中,我重现了这个问题:我有一个带有几个标签的组,其中一个包含在容器中(小部件w-及其布局t-包括标签“什么是额外的空间?”)。 我的目标是使所有标签之间的间距相同,无论它们是否在容器中。 (容器不应占用空间)
我还试图为小部件的不同部分着色。我的填充在哪里?小部件之间的额外空间是什么(蓝色之间)。我该如何删除它?
#include <QApplication>
#include <QtCore>
#include <QMainWindow>
#include <QGroupBox>
#include <QHBoxLayout>
#include <QLabel>
#include <QMdiArea>
#include <QMdiSubWindow>
#include <stdlib.h>
QMdiArea* g1;
QGroupBox* g1a;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow* main_window = new(QMainWindow);
main_window->resize(200, 200);
main_window->setWindowTitle("Hello");
g1a = new QGroupBox("G1A", g1);
QVBoxLayout *g1a_l = new QVBoxLayout(g1a);
g1a_l->setSpacing(0);
main_window->setCentralWidget(g1a);
g1a_l->addWidget((QLabel*)new QLabel(" Nice Label1"));
g1a_l->addWidget((QLabel*)new QLabel(" Nice Label2"));
QWidget* w=new QWidget(0);
w->setStyleSheet( "border: 2 solid blue; padding: 2 solid yellow;" );
QVBoxLayout* t=new QVBoxLayout(w);
t->setSpacing(0);
t->addWidget(new QLabel("What is that extra space??",w));
g1a_l->addWidget(w);
g1a_l->addWidget((QLabel*)new QLabel(" Nice Label3"));
g1a_l->addWidget((QLabel*)new QLabel(" Nice Label4"));
//sub_window->adjustSize();
main_window->show(); //How to I get that to recaclulate the size of its contents?
return app.exec();
}
答案 0 :(得分:7)
答案 1 :(得分:2)
您所指的空间是内容保证金。文档here描述了如何绘制小部件。要摆脱那个额外的空间,你必须打电话:
widget->setContentsMargins(0, 0, 0, 0);
我认为最终结果应如下所示:
答案 2 :(得分:0)
我记得控制间距的方法是在小部件之间添加专用的QSpacerItem
项。
但我首先要弄清楚w
正在做什么。为什么不直接拨打g1a_l->addLayout(t);
?