Подтвердить что ты не робот

Процент Qt QHBoxLayout

Как сохранить соотношение сторон между двумя QHBoxLayouts?

Например, я хочу, чтобы QHBoxLayout составляла одну треть всей ширины окна, а другая - две трети всей ширины окна: enter image description here

Как я могу это достичь? Я попытался возиться с подсказками размера элементов управления в них, но это не сработало

4b9b3361

Ответ 1

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 работает, но я предпочитаю гораздо меньше кода.

По крайней мере размерPolicy по умолчанию Предпочитаемый/Предпочитаемый.

Политика по умолчанию - Предпочтительная/Предпочтительная, что означает, что виджет может быть свободно изменен, но предпочитает размер 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

Ответ 3

Вы можете отредактировать sizePolicy для виджетов и установить более высокий horizontalStretch для виджета справа.

Ответ 4

Вы также можете использовать свойство layoutStretch:

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

В вашем случае это было бы

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