Изменить поведение изменения размера в раскладках Qt - PullRequest
4 голосов
/ 26 августа 2009

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

Ответы [ 3 ]

13 голосов
/ 27 августа 2009

У меня были проблемы с этим в прошлом, и вот некоторые вещи, которые я нашел:

  1. Сначала убедитесь, что для всех виджетов, которые вы хотите расширить, для sizePolicy установлено значение "Расширение".

  2. Убедитесь, что виджеты, которые составляют ваши пользовательские виджеты, находятся в макете, который позволяет расширяться. Вы можете проверить это, просто добавив один из ваших пользовательских виджетов в окно и увидев, что он расширяется, как и ожидалось.

  3. Убедитесь, что все виджеты в форме, которые вы не хотите расширять, имеют фиксированный (минимальный = максимальный) размер в измерении, чтобы они оставались статичными.

  4. Иногда компоновка сетки вызывает некоторые странные проблемы с пробелами, потому что размеры строк изменяются на основе самого большого виджета во всей строке и аналогично столбцам. Для некоторых макетов лучше использовать вертикальный макет, содержащий горизонтальные макеты, или наоборот, чтобы создать эффект сетки. Только так каждый суб-макет размещается независимо от других строк или столбцов.

9 голосов
/ 27 августа 2009

Управление расширением сетки программно

Я обнаружил, что вы можете легко контролировать, какие столбцы / строки расширяются, а какие столбцы / строки остаются фиксированными по ширине, используя QGridLayout::setColumnStretch() и QGridLayout::setRowStretch(). Вам нужно будет указать веса для определенных столбцов (0 - без растяжения).

Например, если вы хотите, чтобы столбец 0 не занимал какую-либо комнату, а столбец 1 - оставшуюся комнату окна, сделайте следующее:

QGridLayout* layout ;
// Set up the layout
layout->setColumnStretch( 0, 0 ) ; // Give column 0 no stretch ability
layout->setColumnStretch( 1, 1 ) ; // Give column 1 stretch ability of ratio 1

Управление расширением сетки с помощью Qt Designer

Вы можете сделать то, что я описал выше, если вы используете Designer. Просто найдите свойства виджета layoutRowStretch и layoutColumnStretch . Он будет содержать список целых чисел через запятую.

0 голосов
/ 27 декабря 2017

Другой вариант находится внутри QT Creator, чтобы указать в виджете макета верхнего уровня раздела, который вы хотите фиксированного размера, layoutSizeConstraint из SetFixedSize. Вы также должны удалить все прокладки из-под этого виджета. В моем случае у меня был диалог с TreeWidget, таблицей и некоторыми элементами выбора цвета. Я хотел, чтобы элементы управления выбором цвета оставались одинаковыми по горизонтали, чтобы они были в VerticalLayout. Я полагаю, что вы можете сделать то же самое с HorizontalLayout, если вы хотите, чтобы вещи оставались на одной высоте. Если вам действительно нужны проставки внутри макета, вы можете использовать пустые метки с фиксированным размером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...