LINUX.ORG.RU

[Qt4] не сжимается widget с layout-ом


0

0

Есть layout, внутри него еще layout-ы: слева layout а справа widget... Этому widget-у, который справа, назначается layout и ведет он себя как layout относительно того что у него внутри. Но как заставить widget масштабироваться так же свободно как и принадлежащий ему layout (setLayout)?

Проблема в том что если справа не layout а widget с layout-ом, то никакие спейсеры и stretch-и не помогают, если надо чтобы widget сжался до самого минимума...

Можно ли заставить второй widget с layout-ом сжимать себя и все что в нем и высвобождать максимальное пространство для layout-а слева?

потыкать свойства?
поставить minimum или expand

megabaks ★★★★
()

А чем именно предполагается масштабировать, растягивая мышкой окно? Или с помощью сплиттера? Выложите ui-файл на pastebin и укажите точнее use-case когда и как виджеты должны себя вести.

Dendy ★★★★★
()

Если понял правильно, то для виджета, что справа, надо поставить layoutSizeConstraint = SetNoConstraint для Qt Design-ера это самое нижнее свойство для Layouta

rip86oz
()
Ответ на: комментарий от Dendy

ui-файла нету, все в коде создается. Масштабирование должно осуществляться автоматически, без управления чем-либо. Виджет, у которого layout, динамически наполняется небольшими виджетами. Надо чтобы layout, назначенный виджету, сжимался по содержимому. А все остальное пространство отдавалось тому layout-у что слева.

Сейчас у меня так: как только в виджет с layout-ом наполняется хотя бы одним элементом, то он тут же оттяпывает ровно половину пространства и соответственно все выглядит не так как задумано... И все это не смотря на то что там spacer или просто addStretch...

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

>сжимался по содержимому
Для этого ставлю sizePolicy = Maximum (Preferred тоже может подойти). Насколько это правильно - не знаю, но работает.

rip86oz
()
Ответ на: комментарий от rip86oz

Я работаю изначально не со своим проектом (мопед не мой), потому не указал очень важные детали, так как нахожусь в процессе изучения. Если проделать все вышеперечисленные рекомендации, то действительно, все работает именно так как и положено.

Если в виджет с layout-ом добавлять например QPushButton-ы небольших размеров, то действительно они сжимаются до минимума и layout слева получает все оставшееся пространство. Если же вместо QPushButton-ов добавляется хоть один QX11EmbedContainer, то виджет с layout-ом ведет себя неадекватно и мгновенно расползается вширь (хотя если для отладки вывести ширину всех элементов в layout-е то видно что размеры у них такие как надо, т.е. не большие). Уже который день сражаюсь с этой мистикой... =(

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

попробуй посмотреть setSizePolicy, должно помочь

trex6 ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

QX11EmbedContainer не использовал ни разу, но как понял он нужен для вставки виджетов из других программ. Может у этого «внедренца» настройки такие, чтоб побольше места занимал? Т.е. там указан sizePolicy = Minimum или ещё что-либо в этом духе. Можно попробовать вставлять виджеты из разных прог и посмотреть - все-ли они кушают место. Можно попробовать для QX11EmbedContainer поставить sizePolicy = Fixed и layoutSizeConstraint = SetMinimumSize.

rip86oz
()
Ответ на: комментарий от rip86oz

QX11EmbedContainer поставить sizePolicy = Fixed

У QX11EmbedContainer-а как раз стоит SetFixedSize. Перепробовал массу других вариантов, всё работает если там нет QX11EmbedContainer-а, а с ним - не работает. В общем ладно, видимо баг или я что-то недопонял, придется вручную размерами управлять...

I-Love-Microsoft ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.