Qt QHBoxLayout百分比大小

问题描述 投票:17回答:3

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

例如,我希望QHBoxLayout是整个窗口宽度的三分之一,另一个是整个窗口宽度的三分之二:

我怎样才能做到这一点?我试着弄乱它们中的控件的大小提示但是没有用

c++ qt qt4
3个回答
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);

2
投票

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

默认情况下,至少大小的策略是首选/首选。

默认策略是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 );

enter image description here

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

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


1
投票

您可以编辑窗口小部件的sizePolicy,并在右侧为窗口小部件设置更高的horizontalStretch

© www.soinside.com 2019 - 2024. All rights reserved.