30

如何保持两个 QHBoxLayouts 之间的纵横比?

例如,我希望 QHBoxLayout 是整个窗口宽度的三分之一,另一个是整个窗口宽度的三分之二: 在此处输入图像描述

我怎样才能做到这一点?我尝试弄乱其中控件的大小提示,但没有成功

4

4 回答 4

36

无效 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);
于 2013-01-28T12:01:32.213 回答
11

york.beta的答案是有效的,但我更喜欢更少的代码。

至少 sizePolicy 默认是 Prefered/Prefered。

默认策略是 Preferred/Preferred,这意味着小部件可以自由调整大小,但更喜欢 sizeHint() 返回的大小。

您可以简单地使用addWidget的第二个参数来拉伸小部件。

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

在此处输入图像描述

http://doc.qt.io/qt-5/qboxlayout.html#addWidget

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

于 2018-01-01T15:01:29.027 回答
5

您还可以使用 layoutStretch 属性:

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

在你的情况下

<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,2">
于 2019-07-05T10:29:59.540 回答
1

您可以编辑小部件的 sizePolicy 并为右侧的小部件设置更高的水平拉伸。

于 2013-01-28T12:02:40.757 回答