Qt QHBoxLayout 百分比大小

30

我如何在两个QHBoxLayout之间保持纵横比?

例如,我想让一个QHBoxLayout占整个窗口宽度的三分之一,另一个QHBoxLayout占整个窗口宽度的三分之二: enter image description here

我该如何实现这个目标?我尝试调整它们中的控件的大小提示,但没有成功。

5个回答

36

void QSizePolicy::setHorizontalStretch(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);

7
谢谢。我还想补充一点,如果在QT Designer中点击QHBoxLayout并选择“转换为 -> 小部件”,您可以在不使用代码的情况下以可视化方式设置HorizontalStretch。 - Johnny Pauling

13
york.beta的回答有效,但我更喜欢代码更少的方法。
至少,大小策略的默认值是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 );

图片描述

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

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


这是我偏爱的答案,因为它简洁明了,避免了样式表的使用。 - undefined

5

1
这实际上是一种更好、更简单的方法。再具体解释一下,'stretch' 属性使用逗号分隔的数字来设置子元素之间的大小比例。对于三个子元素,使用 "1,2,2" 将分别给每个小部件分配整体尺寸的 1/5、2/5、2/5。 - wanyancan

1

您可以编辑小部件的大小策略,并将右侧小部件的horizontalStretch设置得更高。


0
你还可以使用setStretchFactor方法:
layout->addWidget(left);
layout->addWidget(right);
layout->setStretchFactor(left, 1);
layout->setStretchFactor(right, 2);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接