Qt小部件(带布局)空间。它是什么?如何清除? [英] Qt widget (with layout) space. What is it? How to remove?

查看:389
本文介绍了Qt小部件(带布局)空间。它是什么?如何清除?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了一个程序,使用小部件作为容器(对于其他小部件)。因为容器的内容随着程序生命周期而变化,所以容器小部件具有与其相关联的布局,所以它适当地调整大小。
问题是容器似乎消耗了一些空间。

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


推荐答案

http://qt-project.org/doc/qt/qlayout.html#contentsMargins =nofollow> contentsMargin

This is contentsMargin

删除它:

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

这篇关于Qt小部件(带布局)空间。它是什么?如何清除?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆