Russian Qt Forum
Октябрь 30, 2020, 19:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в QVBoxLayout скрыть виджет, не меняя разтяжения остальных виджетов?  (Прочитано 2067 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 303


Просмотр профиля
« : Июль 24, 2020, 10:34 »

Здравствуйте, господа форумчане.

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

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

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

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

Сообщений: 5873


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Июль 24, 2020, 11:02 »

Используй spacer
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
billy4685
Крякер
****
Offline Offline

Сообщений: 303


Просмотр профиля
« Ответ #2 : Июль 24, 2020, 11:55 »

Используй spacer
Сделал я вместо QVBoxLayout QGridLayout, рядом с первой кнопкой добавил вертикальный
spacer (рис. 1).

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

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

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

Сообщений: 2763


Просмотр профиля
« Ответ #3 : Июль 24, 2020, 13:49 »

Или засунь виджеты в грид.
Записан

ArchLinux x86_64 / Win10 64 bit
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5873


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Июль 24, 2020, 14:08 »

Я же приложил ui файл в котором то поведение, которое тебе нужно. Запустив дизайнере превью и жмякни на кнопку 1/
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
billy4685
Крякер
****
Offline Offline

Сообщений: 303


Просмотр профиля
« Ответ #5 : Июль 24, 2020, 14:21 »

Я же приложил ui файл в котором то поведение, которое тебе нужно. Запустив дизайнере превью и жмякни на кнопку 1/
Спасибо, не заметил. Ясно, значит другого решения нет, как добавлять еще один item и бросать туда spacer.
Жаль.
« Последнее редактирование: Июль 24, 2020, 14:28 от billy4685 » Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 303


Просмотр профиля
« Ответ #6 : Июль 24, 2020, 14:29 »

Или засунь виджеты в грид.
Спасибо.
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 446


Просмотр профиля
« Ответ #7 : Июль 27, 2020, 16:29 »

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

Сообщений: 303


Просмотр профиля
« Ответ #8 : Июль 31, 2020, 12:04 »

Hellraiser, спасибо, попробую.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 22.