如何删除Qt小部件(带布局)空间

问题描述 投票:0回答:3

我编写了一个使用小部件作为容器(用于其他小部件)的程序。由于容器的内容在程序生命周期中会发生变化,因此容器小部件具有与其关联的布局,因此可以正确调整大小。

问题是容器似乎占用了一些空间。

在下面的程序中,我重现了这个问题:

我有一组带有一些标签的组,其中一个标签包含在容器中(小部件

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();
}
c++ qt layout widget qboxlayout
3个回答
7
投票

这是contentsMargin

删除它:

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

2
投票

您所指的空间是内容边距。文档here描述了如何绘制小部件。要摆脱多余的空间,您必须致电:

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

我相信最终的结果应该是这样的:

enter image description here


0
投票

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

QSpacerItem
项目。

但我首先尝试弄清楚

w
在做什么。为什么不直接打电话给
g1a_l->addLayout(t);

© www.soinside.com 2019 - 2024. All rights reserved.