Qt QGridLayout автоматически центрирует (перемещает) элементы по центру.

у меня есть QHBoxLayout в моей форме с 3 макетами, добавленными к нему. У второго есть пункты, касающиеся моего вопроса.

у меня есть QVBoxLayout на второй панели основного макета ( QHBoxLayout).
это QVBoxLayout имеет QScrollArea добавлено к нему с addWidget,

это QScrollArea является родителем для QWidget называется «scrollContents», который в свою очередь содержит QGridLayout,

Я добавляю созданный виджет к этому QGridLayout который имеет фиксированную высоту. Мы можем рассмотреть это 100px теперь.

Если это QGridLayout имеет элементы, общая высота которых меньше, чем сама форма, он центрирует эти виджеты по вертикали с одинаковым пространством между ними.

Если есть один виджет, он появляется прямо посередине. Но я бы хотел, чтобы они были перечислены сверху вниз.

Пример: [### представляет площадь QScrollArea в котором есть QWidget с QGridLayout,

   OK      ->   DESIRED    -> NOT DESIRED AND WHAT HAPPENS
##########    ##########               ##########
# |item| #    # |item| #               #        #
# |item| #    #        #               #        #
# |item| #    #        #               #        #
# |item| #    #        #               # |item| #
# |item| #    #        #               #        #
# |item| #    #        #               #        #
# |item| #    #        #               #        #
##########    ##########               ##########
|item|
|item|
|item|

В основном: если есть место для 9 «строк», то, когда добавляется один элемент, он появляется в середине в месте 5-го. Если их 9 или более, они отображаются так, как должны. Если их 8 или меньше, их промежуточное пространство расширяется, чтобы отцентрировать их все.

Как я могу решить это?

Спасибо.

6

Решение

Существует также метод, отличный от того, что ответил trollixx: добавьте фиктивный виджет с его политикой вертикального размера, настроенной на расширение, в нижней части поля. QGridLayout, Увидеть этот ответ, который также содержит пример с панелью инструментов.

5

Другие решения

QGridLayout :: addWidget () имеет alignment параметр. У меня работает следующий код:

gridLayout->addWidget(new QPushButton("Button"), 0, 0, Qt::AlignTop);
12

Используйте вертикальную прокладку внизу, вот для чего они.

0
По вопросам рекламы [email protected]