2012-06-12 3 views
1

У меня есть виджет контейнера с QVBoxLayout.не может изменять размеры виджетов в QVBoxLayout

У меня есть около 100 виджетов, добавленных в VBoxLayout. Все они имеют одинаковую высоту. В какой-то момент необходимо изменить размер одной из строк. Я изменяю размер (newWidth, newHeight) виджета и макета вызова() на QVBoxLayout, но ничего не меняется. размер остается фиксированным.

Как динамически изменять высоту виджетов в QVBoxLayout?

ответ

5

Изменение размера виджета, который вставлен в макет, является не-операционным, по дизайну. В макете размещены виджеты, а не вы.

Если вы хотите виджет фиксированной высоты в QVBoxLayout, вы должны установить минимальную и максимальную высоту виджета и обеспечить его размер. Платина не игнорируется в вертикальном направлении.

Если вы хотите, чтобы виджет был в два раза больше всех других виджетов. Установите его растяжку на 2 и растяните другие виджеты до 1. Вызовите layout->setStretch(index, stretch). Вижетам будет присвоена ширина пропорционально их протяженности. Например, при всех растяжениях на 1 и один участок в 2, виджет с растяжкой 2 будет в два раза больше.

Все остальное равно (это важный бит!), Растяжки пропорциональны размерам виджетов. Если вы хотите, скажите, что все виджеты имеют высоту 20 пикселей, но один из них высотой 30 пикселей, просто установите их участки так.

Если макет имеет точную высоту, так что сумма всех высот виджетов + расстояний + полей добавляется до высоты макета, вы получите height = stretch для виджетов в макете. И наоборот, если вы начинаете с высоты макета, вычтите верхнее и нижнее поля и (расстояние между виджетами - 1) *, у вас будет высота, оставшаяся для виджетов. Затем вы можете вручную распределить эту высоту среди виджетов, установив растяжку равной желаемой высоте.

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

+0

Спасибо, но это ничего не сделало. нет никакого влияния на высоту моих виджетов, когда я setStretch, – JasonGenX

+0

Вы назвали его во всех виджетах в макете? Вы также должны установить значение sizePolicy всех виджетов для игнорирования в обоих направлениях, по крайней мере, изначально. –

+2

настройка политики размера для «игнорирования» для обоих направлений улучшает ситуацию. но я все еще получаю недоминирующие результаты. участок 2, растет на 3. вещи никогда не сжимаются, когда возвращаются к 1. он неустойчив. он работает только на всех других виджетах, а не на всех. очень странное поведение. нет никаких шансов, что я смогу разобраться в этом, не потратив на это недель. Возможно, мне придется разработать собственный собственный макет. Qt просто не работает. Я удивлен, что изменение высоты виджета в макете будет такой задачей уровня phD. – JasonGenX

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