-1

AQLayout总是尝试使用QWidget. 但是,有时,您希望它保持最小尺寸并以小部件为中心...因为您觉得它看起来更好(如果布局仅包含没有意义的项目,显示大于其默认尺寸:QLabelQPushButton和类似的东西)。

过去我遇到过这个问题数百次,我总是在各处添加愚蠢的 QSpacerItems 来解决这个问题。我想知道是否有更好的解决方案。

我将问题隔离为一个说明:

#include <QApplication>
#include <QDialog>
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QSpacerItem>

class MainFrame : public QDialog
{
public:
    MainFrame() : QDialog(NULL)
    {
        QHBoxLayout* theLayout = new QHBoxLayout();
        setLayout( theLayout );

        // don't want to add spacers all the time!
        //theLayout->addSpacerItem( new QSpacerItem( 10, 10, QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding ) );
        theLayout->addWidget( new QLabel( "A text", this ) );
        theLayout->addWidget( new QPushButton( "A button", this ) );
        // don't want to add spacers all the time!
        //theLayout->addSpacerItem( new QSpacerItem( 10, 10, QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding ) );
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainFrame w;
    w.resize(400,400);
    w.show();

    return a.exec();
}

没有垫片,它看起来像这样:

在此处输入图像描述

我讨厌这个显示器,QWidget你的眼睛必须在小部件周围四处寻找相关信息。

使用垫片,它的外观如下:

在此处输入图像描述

我更喜欢它。

有没有办法在不添加垫片的情况下做到这一点?添加它们并且总是必须指定所有这些参数是一件痛苦的事情(默认值不会做你想要的......)。

我尝试使用QLayout::setSizeConstraint没有成功。似乎不打算这样做。

4

1 回答 1

4

我会通过以下方式做到这一点:

[..]
theLayout->addStretch();
theLayout->addWidget( new QLabel( "A text", this ) );
theLayout->addWidget( new QPushButton( "A button", this ) );
theLayout->addStretch();
[..]
于 2014-09-17T12:13:30.007 回答