Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xintrea от Ноябрь 23, 2017, 13:35



Название: Почему-то не растягивается корневой QVBoxLayout до размеров окна виджета
Отправлено: xintrea от Ноябрь 23, 2017, 13:35
Есть окно, наследующее QDialog. Ее интерфейс создан в Designer. В окне создан "корневой" QVBoxLayout, внутри которого размещаются все остальные элементы.

Структура окна показана на первом скриншоте (http://www.prog.org.ru/index.php?action=dlattach;topic=31754.0;attach=9250;image).

Размер области 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 не меняется! Учитывая, что он "корневой", этот лайоут должен растянуться на ширину окна. Но этого не происходит.

Выглядит это так: см. второй скриншот (http://www.prog.org.ru/index.php?action=dlattach;topic=31754.0;attach=9252;image)

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

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

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

Или, что то же самое, но с другой стороны: как увеличить размер окна так, чтобы окно полностью показывало все виджеты?


Название: Re: Почему-то не растягивается корневой QVBoxLayout до размеров окна виджета
Отправлено: Авварон от Ноябрь 23, 2017, 14:45
У вас лайаут лежит на основном виджете (точнее, есть невидимый виджет с этим лайаутом, у которого парент - основной виджет).
Это видно по перечеркнутому лайауту у корневого виджета (в дереве справа вверху)
Чтобы назнаить лайаут корневому виджету, нужно убить вертикальный лайаут, выделить корневой виджет и нажать кнопку лайаута сверху (а не перетаскивать лайаут на форму)


Название: Re: Почему-то не растягивается корневой QVBoxLayout до размеров окна виджета
Отправлено: xintrea от Ноябрь 23, 2017, 15:11
Похоже на то. Кстати, можно не удалять лайаут, а просто нажать кнопку "Скомпоновать по вертикали". И если при этом был выделен вертикальный лайаут, он просто применится. И перечеркнутый значек исчезнет.


Название: Re: Почему-то не растягивается корневой QVBoxLayout до размеров окна виджета
Отправлено: __Heaven__ от Ноябрь 23, 2017, 16:46
Я обычно grid назначаю и без дополнительных лэйаутов обхожусь.