LINUX.ORG.RU

[Qt]Размещение виджета в центре дургого виджета

 


0

1

Всем доброго времени суток.

Что-то под конец рабочего дня мозг совсем перестал шевелиться.
В итоге возник вопрос: есть виджет, в центре этого виджета необходимо расположить другой (виджет2). Пока что придумался только вариант с двумя Layout'ами и Layout::addStretch() для каждого по 2 раза.
(QHBoxLayout, внутри него QVBoxLayout, ну а в центре него уже виджет2)

Надеюсь, что есть путь попроще.

Всем заранее спасибо за ответы.

★★★★★

Я всегда именно так и делаю, вот первый попавшийся кусок кода:

QFormLayout *form_layout = new QFormLayout();
// заполняем form_layout
QVBoxLayout *main_layout = new QVBoxLayout(this);
main_layout->addStretch();
main_layout->addLayout(form_layout);
main_layout->addStretch();

Obey-Kun ★★★★★
()
Ответ на: комментарий от Sectoid

Я тоже смотрел в сторону QGridLayout, но так и не придумал, как при помощи него подобное можно сделать. Как я понял, его размерность напрямую задать нельзя (или я невнимательно читал?), а пихать виджет пустышку в cell[3][3] тоже костыль. Так что решил пока остановится на 2-х лейаутах.
Тем не менее, спасибо за совет.

trex6 ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

Ну вот и я приблизительно так же делаю. Только у меня mainLayout и mainLayout2 =)
Но выглядит костыльно...

trex6 ★★★★★
() автор топика
Ответ на: комментарий от trex6

> а пихать виджет пустышку в cell[3][3] тоже костыль

Не виджет надо пихать, а QSpacerItem, тогда уж. Но мне почему-то больше нравится вариант с QVBoxLayout и двумя растяжками (для центрирования только по вертикали).

Obey-Kun ★★★★★
()
Ответ на: комментарий от trex6

Как я понял, его размерность напрямую задать нельзя (или я невнимательно читал?), а пихать виджет пустышку в cell[3][3] тоже костыль.

Гм. Да, похоже фигня получается. А если так:

QGridLayout * layout = new QGridLayout();
layout->addItem(someItem, 0, 0, 1, 1,
                Qt::AlignHCenter | Qt::AlignVCenter);

Sectoid ★★★★★
()
Ответ на: комментарий от unC0Rr

>> пихать виджет пустышку

а не достаточно ли вместо пустышки ставить setStretch()?


Уточните, пожалуйста, для какого объекта необходимо вызывать setStretch()?
У QGridLayout такого метода нет.

trex6 ★★★★★
() автор топика
Ответ на: комментарий от Sectoid

Надо попробовать, но я подозреваю, что виджет растянется на всю возможную высоту/ширину, а мне необходимо его скомпоновать в центре (прижать со всех сторон =)

trex6 ★★★★★
() автор топика
Ответ на: комментарий от Sectoid

Ок, идею понял.
Пока что все равно остаюсь на 2-х лейаутах, но в будущем попробую и такой вариант.

Всем большое спасибо за советы.

trex6 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.