繁体   English   中英

Qt小部件(带布局)空间。 它是什么? 怎么删除?

[英]Qt widget (with layout) space. What is it? How to remove?

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

在下面的程序中,我重现了这个问题:我有一个带有几个标签的组,其中一个包含在一个容器中(小部件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();
 }

这是contentsMargin

要删除它:

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

您引用的空间是内容边距。 这里的文档描述了如何绘制小部件。 为了摆脱你必须打电话的额外空间:

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

我相信最终结果应如下所示:

在此输入图像描述

我记得控制间距的方法是在窗口小部件之间添加专用的QSpacerItem项。

但我首先要弄清楚w在做什么。 为什么不调用g1a_l->addLayout(t); 直?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM