如何在两个QHBoxLayouts之间保持纵横比?
例如,我希望QHBoxLayout是整个窗口宽度的三分之一,另一个是整个窗口宽度的三分之二:
我怎样才能做到这一点?我试着弄乱它们中控件的大小提示,但是没有用到
答案 0 :(得分:25)
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);
答案 1 :(得分:2)
york.beta的答案正在发挥作用,但我更喜欢代码。
默认情况下,至少sizePolicy是首选/首选。
默认策略是Preferred / Preferred,这意味着窗口小部件可以自由调整大小,但更喜欢大小sizeHint()返回。
您只需使用 addWidget 的 second 参数来拉伸小部件。
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 );
答案 2 :(得分:1)
您可以编辑小部件的sizePolicy,并在右侧为小部件设置更高的horizontalStretch。
答案 3 :(得分:0)
您还可以使用layoutStretch属性:
https://doc.qt.io/qt-5/layout.html#stretch-factors
您的情况应该是
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,2">