Russian Qt Forum
Ноябрь 27, 2024, 00:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Почему-то не растягивается корневой QVBoxLayout до размеров окна виджета  (Прочитано 4374 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Ноябрь 23, 2017, 13:35 »

Есть окно, наследующее QDialog. Ее интерфейс создан в Designer. В окне создан "корневой" QVBoxLayout, внутри которого размещаются все остальные элементы.

Структура окна показана на первом скриншоте.

Размер области VideoCapture заранее неизвестен. Пока что это простая QLabel, которой программно устанавливается картинка через метод setPixmap().

Задача: после установки картинки расширить окно так, чтобы картинка была видна полностью.

В виджете картинка вставляется так:

Код:
ui->graphicsPixmapLabel->setMinimumSize(sizeOfImage.width, sizeOfImage.height);
ui->graphicsPixmapLabel->setPixmap(QPixmap::fromImage( img ));

Плюс далее я даю команды на изменение размера окна:

Код:
this->setMinimumSize(sizeOfImage.width, sizeOfImage.height);
this->adjustSize();

Да, тут нужно еще добавлять размеры уже существующих виджетов, но пока так, главное что размер окна программно увеличивается. Но при увеличении размеров окна, размер корневого QVBoxLayout не меняется! Учитывая, что он "корневой", этот лайоут должен растянуться на ширину окна. Но этого не происходит.

Выглядит это так: см. второй скриншот

На этой картинке обезьяна - это примерно центр кадра. Видно, что кадр на самом деле больше, чем он отображается. И еще какая-то проблема, что нижний buttonBox залез на картинку, хотя в QVBoxLayout он лежит в отдельной "строке".

Я посмотрел все методы QVBoxLayout и не увидел там метода изменения размера, метода подгонки размера под вышестоящий контейнер. Создается впечатление, что с размерами Q*Layout работать невозможно, и это вроде как правильно, потому что декларируется, что он занимает все свободное пространство, выделяемое ему вышестоящим виджетом. Но почему-то после увеличения окна, он не стремится тоже увеличится.

Вопрос: как сделать увеличение QVBoxLayout вслед за увеличением размера окна?

Или, что то же самое, но с другой стороны: как увеличить размер окна так, чтобы окно полностью показывало все виджеты?
« Последнее редактирование: Ноябрь 23, 2017, 13:46 от xintrea » Записан

Собираю информацию по крупицам
http://webhamster.ru
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Ноябрь 23, 2017, 14:45 »

У вас лайаут лежит на основном виджете (точнее, есть невидимый виджет с этим лайаутом, у которого парент - основной виджет).
Это видно по перечеркнутому лайауту у корневого виджета (в дереве справа вверху)
Чтобы назнаить лайаут корневому виджету, нужно убить вертикальный лайаут, выделить корневой виджет и нажать кнопку лайаута сверху (а не перетаскивать лайаут на форму)
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Ноябрь 23, 2017, 15:11 »

Похоже на то. Кстати, можно не удалять лайаут, а просто нажать кнопку "Скомпоновать по вертикали". И если при этом был выделен вертикальный лайаут, он просто применится. И перечеркнутый значек исчезнет.
Записан

Собираю информацию по крупицам
http://webhamster.ru
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Ноябрь 23, 2017, 16:46 »

Я обычно grid назначаю и без дополнительных лэйаутов обхожусь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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