Russian Qt Forum

Qt => Вопросы новичков => Тема начата: YvenTitan от Сентябрь 21, 2016, 09:57



Название: Выровнять QLabel и QLineEdit по центру
Отправлено: YvenTitan от Сентябрь 21, 2016, 09:57
Здравствуйте
Надо чтобы QLabel и QLineEdit, разные по длине, рассматривались в QVBoxLayout как 1 виджет, чтобы можно было этот общий виджет выровнять по центру. Может лучше без QVBoxLayout обойтись. Через QGridLayout тоже не получилось, потому что QLineEdit намного длиннее.
Можете подсказать, как лучше сделать?


Название: Re: Выровнять QLabel и QLineEdit по центру
Отправлено: Apktyc от Сентябрь 21, 2016, 10:25
Поместить эти два виджета в отдельный компоновщик (layout), и уже его добавлять в Ваш QVBoxLayout через addLayout.


Название: Re: Выровнять QLabel и QLineEdit по центру
Отправлено: gil9red от Сентябрь 21, 2016, 10:38
Или использовать QFormLayout и его addRow (http://doc.qt.io/qt-4.8/qformlayout.html#addRow)


Название: Re: Выровнять QLabel и QLineEdit по центру
Отправлено: YvenTitan от Сентябрь 21, 2016, 10:49
Поместить эти два виджета в отдельный компоновщик (layout), и уже его добавлять в Ваш QVBoxLayout через addLayout.
Какой должен быть компоновщик layout? Если QHBoxLayout, то растягивается QLineEdit. Если вместо QLineEdit ставить QSpinBox, то появляется пробел между QLabel и QSpinBox, которого необходимо избежать


Название: Re: Выровнять QLabel и QLineEdit по центру
Отправлено: YvenTitan от Сентябрь 21, 2016, 11:01
Или использовать QFormLayout и его addRow (http://doc.qt.io/qt-4.8/qformlayout.html#addRow)
В этом случае QLineEdit растягивается при растягивании окна. Вместо него может быть QSpinBox и это будет некрасиво.


Название: Re: Выровнять QLabel и QLineEdit по центру
Отправлено: Apktyc от Сентябрь 21, 2016, 11:09
На вскидку, настройка выравнивания (setAlignment) для компоновщика и sizePolicy, minimumSize, maximumSize для виджетов.


Название: Re: Выровнять QLabel и QLineEdit по центру
Отправлено: gil9red от Сентябрь 21, 2016, 12:29
Поместить эти два виджета в отдельный компоновщик (layout), и уже его добавлять в Ваш QVBoxLayout через addLayout.
Какой должен быть компоновщик layout? Если QHBoxLayout, то растягивается QLineEdit. Если вместо QLineEdit ставить QSpinBox, то появляется пробел между QLabel и QSpinBox, которого необходимо избежать

Добавьте слева и справа пружинки, тогда по идеи, они не будут растягиваться по ширине:
Код
C++ (Qt)
hLayout.addStretch();
hLayout.addWidget(label);
hLayout.addWidget(lineEdit);
hLayout.addStretch();

Еще у виджетов есть политика растягивания -- setSizePolicy (http://doc.qt.io/qt-4.8/qwidget.html#sizePolicy-prop) и установка QSizePolicy::Minimum (http://doc.qt.io/qt-4.8/qsizepolicy.html#Policy-enum) не даст виджету занять все доступное ему место.

А лучше всего открыть дизайнер Qt и в нем накидать форму -- удобнее настраивать и или ей воспользоваться, или посмотреть какой код формы был сгенерирован.


Название: Re: Выровнять QLabel и QLineEdit по центру
Отправлено: YvenTitan от Сентябрь 21, 2016, 12:32
Спасибо, помогло