Russian Qt Forum

Qt => Вопросы новичков => Тема начата: billy4685 от Июль 24, 2020, 10:34



Название: Как в QVBoxLayout скрыть виджет, не меняя разтяжения остальных виджетов?
Отправлено: billy4685 от Июль 24, 2020, 10:34
Здравствуйте, господа форумчане.

У меня есть окно с тремя кнопками. Всем кнопкам задано свойство sizePolicy и minimumSize, как показано
на рисунке 1. Кнопки лежат в QVBoxLayout. Для которого заданы свойства, смотрите рисунок 2.

В результате окно имеет вид, рисунок 3 а). Когда я скрываю первую кнопку, с помощью метода setHidden(),
остальные две кнопки растягиваются по вертикали (рисунок 3 б)).

Как сделать так, чтобы место первой кнопки оставалось не затронутым, и две остальные кнопки не растягивались
(рисунок 4).

Если использовать QGridLayout, то когда скрываются все виджеты в столбце или строке, место где, лежат виджеты
уменьшается на 1 пиксель по строке или столбцу, и этот пиксель добавляется к одному из столбцов или строк
лежащих в этой же компановке. Как избавится от этого тоже не нашел пока.


Название: Re: Как в QVBoxLayout скрыть виджет, не меняя разтяжения остальных виджетов?
Отправлено: Пантер от Июль 24, 2020, 11:02
Используй spacer


Название: Re: Как в QVBoxLayout скрыть виджет, не меняя разтяжения остальных виджетов?
Отправлено: billy4685 от Июль 24, 2020, 11:55
Используй spacer
Сделал я вместо QVBoxLayout QGridLayout, рядом с первой кнопкой добавил вертикальный
spacer (рис. 1).

В результате, ситуация обстоит лучше, но все равно, вторая кнопка на пиксель стала
больше (рис. 2 - линиями показана данная ситуация:  а) до скрытия кнопки, б) - после
скрытия кнопки).

Как добиться, чтобы место под первый item, где находится первая кнопка в QGridLayout-е
не менялся, и все кнопки не меняли своих размеров, после скрытия первой?

А как быть с QVBoxLayout или с QHBoxLayout вообще не пойму. Разве, что вместо кнопки
бросать в дизайнере spacer, а кнопку в коде потом добавлять. Но это как-то не серьезно.


Название: Re: Как в QVBoxLayout скрыть виджет, не меняя разтяжения остальных виджетов?
Отправлено: kuzulis от Июль 24, 2020, 13:49
Или засунь виджеты в грид.


Название: Re: Как в QVBoxLayout скрыть виджет, не меняя разтяжения остальных виджетов?
Отправлено: Пантер от Июль 24, 2020, 14:08
Я же приложил ui файл в котором то поведение, которое тебе нужно. Запустив дизайнере превью и жмякни на кнопку 1/


Название: Re: Как в QVBoxLayout скрыть виджет, не меняя разтяжения
Отправлено: billy4685 от Июль 24, 2020, 14:21
Я же приложил ui файл в котором то поведение, которое тебе нужно. Запустив дизайнере превью и жмякни на кнопку 1/
Спасибо, не заметил. Ясно, значит другого решения нет, как добавлять еще один item и бросать туда spacer.
Жаль.


Название: Re: Как в QVBoxLayout скрыть виджет, не меняя разтяжения остальных виджетов?
Отправлено: billy4685 от Июль 24, 2020, 14:29
Или засунь виджеты в грид.
Спасибо.


Название: Re: Как в QVBoxLayout скрыть виджет, не меняя разтяжения
Отправлено: Hellraiser от Июль 27, 2020, 16:29
Я же приложил ui файл в котором то поведение, которое тебе нужно. Запустив дизайнере превью и жмякни на кнопку 1/
Спасибо, не заметил. Ясно, значит другого решения нет, как добавлять еще один item и бросать туда spacer.
Жаль.
Можно и без верхнего спейсера: надо установить для строки грида минимальную высоту, равную высоте скрываемой кнопки + размер вертикального спейсинга, через setRowMinimumHeight, а сам вертикальный спейсинг в ноль.


Название: Re: Как в QVBoxLayout скрыть виджет, не меняя разтяжения остальных виджетов?
Отправлено: billy4685 от Июль 31, 2020, 12:04
Hellraiser, спасибо, попробую.