Qt 小部件(带布局)空间.它是什么?如何去除?

2021-12-24 00:00:00 qt widget layout c++ spacing

我编写了一个使用小部件作为容器的程序(用于其他小部件).因为容器的内容随着程序的生命周期而变化,容器小部件有一个与之关联的布局,因此它可以正确调整大小.问题是容器似乎占用了一些空间.

I have written a program that uses widgets as container (for other widgets). Because the contents of the container varies along the program life, the container widget has a layout associated to it so it resizes properly. The problem is that the container seems to consume some space.

在下面的程序中,我重现了这个问题:我有一个带有几个标签的组,其中一个包含在容器中(小部件 w -及其布局 t- 包括标签那是什么额外的空间?").我的目标是让所有标签之间的间距相同,无论它们是否在容器中.(容器不应占用空间)

In the following program, I have reproduced the problem: I have a group with a few labels, where one of them is included in a container (the widget w -and its layout t- includes the label "what is that extra space?"). My goal is to get the spacing between all labels the same, regardless whether they are in containers or not. (the container should not consume space)

我还尝试为小部件的不同部分着色.我的填充在哪里?小部件之间(蓝色之间)的额外空间是多少.我该如何删除它?

I have also tried to color the different parts of the widgets. Where is my padding? What is the extra space between the widgets (between the blue). And how do I remove it?

 #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();
 }

推荐答案

这是内容边距

删除它:

t->setContentsMargins(0,0,0,0);

相关文章