-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 に答える