2009-08-26 5 views
4

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

ответ

11

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

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

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

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

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

+1

# 4 это то, что я давно сделал так спасибо :) –

+0

Очень хороший ответ, спасибо! –

8

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

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

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

0

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

Смежные вопросы