web-dev-qa-db-ja.com

QtQHBoxLayoutのパーセンテージサイズ

2つのQHBoxLayout間のアスペクト比を維持するにはどうすればよいですか?

たとえば、QHBoxLayoutをウィンドウ幅全体の3分の1にし、もう1つをウィンドウ幅全体の3分の2にします。 enter image description here

どうすればこれを達成できますか?コントロールのサイズのヒントをいじってみましたが、うまくいきませんでした

22
Johnny Pauling

void QSizePolicy :: setHorizo​​ntalStretch(uchar StretchFactor)

例:

QHBoxLayout* layout = new QHBoxLayout(form);

QWidget* left = new QWidget(form);
QSizePolicy spLeft(QSizePolicy::Preferred, QSizePolicy::Preferred);
spLeft.setHorizontalStretch(1);
left->setSizePolicy(spLeft);
layout->addWidget(left);

QWidget* right = new QWidget(form);
QSizePolicy spRight(QSizePolicy::Preferred, QSizePolicy::Preferred);
spRight.setHorizontalStretch(2);
right->setSizePolicy(spRight);
layout->addWidget(right);
28
york.beta

york.beta の答えは機能していますが、私ははるかに少ないコードを好みます。

少なくともsizePolicyはデフォルトでPreferred/Preferredです。

デフォルトのポリシーはPreferred/Preferredです。つまり、ウィジェットは自由にサイズ変更できますが、sizeHint()が返すサイズを優先します。

addWidgetsecondパラメーターを使用して、ウィジェットを引き伸ばすことができます。

QHBoxLayout *layout = new QHBoxLayout( this );
layout->setContentsMargins( 0, 0, 0, 0 );
layout->setSpacing( 0 );

QPushButton *left = new QPushButton( "133px", this );
left->setStyleSheet( "QPushButton{border: 1px solid red;}" );
QPushButton *right = new QPushButton( "267px", this );
right->setStyleSheet( "QPushButton{border: 1px solid blue;}" );

layout->addWidget( left, 33 );
layout->addWidget( right, 66 );

this->setLayout( layout );
this->setFixedWidth( 400 );

enter image description here

http://doc.qt.io/qt-5/qboxlayout.html#addWidget を参照してください

および http://doc.qt.io/qt-5/qwidget.html#sizePolicy-prop

7
Pixtar

ウィジェットのsizePolicyを編集して、右側のウィジェットに高い horizo​​ntalStretch を設定できます。

1
Zlatomir

また、layoutStretchプロパティを使用することもできます。

https://doc.qt.io/qt-5/layout.html#stretch-factors

あなたの場合、それは

<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,2">
0
Lars Hadidi