LINUX.ORG.RU

Qt динамическое изменение размера виджетов

 


0

3

Добрый день, есть HBoxLayout и в нем находится два виджета. У обоих политика размеров Expanding. При нажатии на кнопку, у второго виджета уменьшаю размер при помощи метода resize(), второй виджет уменьшается, но первый его место не занимает. Причем если я буду у второго виджета вызывать метод hide(). То все отлично работает, второй виджет скрывается, а первый занимает его место. Подскажите как мне без метода hide() перерисовать корректно размеры виджетов, что бы один уменьшился, а другой увеличился.


А что мешает для первого виджета рассчитать новые размеры (с учетом уменьшевшегося второго виджета) и сделать resize() для него тоже, как и для второго?

Chord ★★★
()
Последнее исправление: Chord (всего исправлений: 1)
Ответ на: комментарий от Chord

Вера в то что первый расширяющийся виджет как-нибудь возьмет и расриширится. Может быть layout этим управляет.

da17
() автор топика

Можешь дополнительно ещё setMinimumSize + setMaximumSize + setSizePolicy. А руками задавать при автоматическом лэйауте - такое себе.

anonymous-angler ★☆
()

Пружины добавь и с политикой поиграй, вообще в этом плане рекомендую Бланшетта Саммерфилда почитать у них целая глава этой теме посвящена - очень толково.

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

Да я все с пружинами и т.д. разобрался. Тут только так логически выходит, что один виджет надо спрятать(окно логов), а занимаемое им место отдать другому виджету. Можно конечно было бы его в Splitter добавить, но вот в данном случае его нужно именно спрятать. В общем после вызова метода для второго виджета setMaximumHeight(), первый виджет занял все место второго (за исключением maximumHeight()).

da17
() автор топика
Последнее исправление: da17 (всего исправлений: 1)
Ответ на: комментарий от da17

Если тебе нужно спрятать один виджет и на его месте отобразить другой, то может лучше использовать для этого QStackedWidget ?

rumgot ★★★★★
()
Ответ на: комментарий от Pavval

А что, выбирать qml только потому что это модно/современно? Какие-нибудь объективные аргументы есть? Особенно если не планируется какой-нибудь хитрый дизайн.

Кстати видел в одном продакшен проекте было вообще совмещение виджетов и qml, т.к. на чистом qml было бы тормознутей.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от rumgot

QML проще, чем говнять нуй на плюсах. Да и декларативность в гуе рулит. Я тоже его когда-то не воспринимал, а потом заценил.

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

QML проще, чем говнять нуй на плюсах

Ну а я вот думаю, что нет, не проще. Говняный гуй - это не то, на чем он написан, а насколько херово он сделан в принципе.

декларативность

Ох уж это магическое слово :-) Это должно сразу восприниматься как аксиома. Ты все равно никогда не пишешь на чистом QML, сложную внутреннюю логику все равно пишешь на плюсах и в итоге мешаешь QML с C++. Если не нужен сложный дизайн - то нафига QML? Просто чтобы было?

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от rumgot

Ты все равно никогда не пишешь на чистом QML, сложную внутреннюю логику все равно пишешь на плюсах и в итоге мешаешь QML с C++.

Конечно, так оно и должно быть. И это ещё приводит к архитектурно-красивому разделению гуя и бизнес логики, чего в коде с виджетами как правило никто не делает, ибо и так сойдёт.

Если не нужен сложный дизайн - то нафига QML? Просто чтобы было?

Просто потому что на нем проще, даже для простого гуя, этот самый гуй писать. Именно за счёт декларативности, а не трахаясь с лейаутами, запердолеными в лейауты, запердолеными в лейауты.

Pavval ★★★★★
()

Вскрыл больную тему что не все в порядке там с масштабруемостью или как ? Че понадобилось окошко с видео уменьшать до размера экранного табло очередных эипл вотч?

anonymous
()

Не дреифь бери за основу ту ос как разбогатеешь расплатишься , не надо как эти (паразиты) все бегать открывать что то там они скоро все падут потому что рано или поздно придется прийти к webgl с поддержкой wailand

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

И это ещё приводит к архитектурно-красивому разделению гуя и бизнес логики, чего в коде с виджетами как правило никто не делает, ибо и так сойдёт.

Ну дык, если есть говнокодеры, которые всю логику пишут в одном классе - это не проблема виджетов.

Просто потому что на нем проще, даже для простого гуя, этот самый гуй писать. Именно за счёт декларативности, а не трахаясь с лейаутами, запердолеными в лейауты, запердолеными в лейауты.

А не нужно ни с чем трахаться. Нужно в дизайнере все раметить за минуту и коде пересекаться с гуем только через его сигналы. В особо изощренных случаях пару лэйаутов не проблема, но это не часто. С нуля никто в здравом уме и не должен херачить гуй вручную кодом. Исключение - совсем примитивный виджет.

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

А , зачем когда есть уже авто гуй на котором не точто рамки ваяют , а целые сайты с управление как будто это de где вот это лишь малая часть функции -> spring , canvas , css и.т.д

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

Нужно в дизайнере все раметить за минуту и коде пересекаться с гуем только через его сигналы.

Напомни, почему ни один нормальный Qt проект не юзает дизайнер?

Pavval ★★★★★
()
Последнее исправление: Pavval (всего исправлений: 1)
Ответ на: комментарий от Pavval

А ты считаешь, что нормальные только ты видел? Слишком инфантильно. Я учавствовал в продакшен проектах, которые используют дизайнер.

rumgot ★★★★★
()
Ответ на: комментарий от Pavval

И кстати, чтобы я понимал уровень твоего понимания кода, который генерирует uic при обработке файлов .ui. Какие проблемы этого кода?

rumgot ★★★★★
()
Ответ на: комментарий от unC0Rr

Так это же как вместо GTK говорить Си.

Прошу прощения, ваше величество :-)

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

Ну вот я уже несколько лет на Qt что-то периодически делаю, о чем вообще спор? Кто-то генерирует все виджеты вручную, иногда подцепляем виджеты которые кто-то создал в дизайнере. У меня и возникла проблема, т.к я сам чаще все прописываю вручную, но пришлось интегрировать чужие виджеты, которые автор делал в дизайнере и не хотелось лезть в их устройство, а хотелось приспособить свой виджет для их корректного отображения.

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

Спор о том, что человек виджеты на помойку выбрасывает в угоду Qt Quick / QML. А я пишу, что для приложений без хитровывернутого дизайна виджеты - вполне себе удобный и подходящий инструмент.

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

Я учавствовал в продакшен проектах, которые используют дизайнер.

А я участвовал в продакшн проектах, которые не используют дизайнер. И причём это далеко не моё решение было. И че?

Pavval ★★★★★
()
Последнее исправление: Pavval (всего исправлений: 1)
Ответ на: комментарий от rumgot

И кстати, чтобы я понимал уровень твоего понимания кода, который генерирует uic при обработке файлов .ui. Какие проблемы этого кода?

Причём тут проблемы кода? Дизайнер Qt, в 2021 году, продолжает сосать за обе щеки у, блин, дизайнера 7-го делфи. Рассказать когда 7 делфи вышел? Если тебе хоть раз придётся делать реально сложный гуй, по ты в один момент за***шся и просто пойдёшь править .ui файл руками, ибо дизайнер не даёт нормально реструктурировать гуй.

А когда-то я, такой зелёный, спрашивал у разработчиков kdevelop, почему они дизайнер не интегрируют. И удивлялся что они меня нахер посылают. А потом познал. Как ты думаешь, почему главный продукт на Qt - кеды - не использует дизайнер тупо нигде? И не использовал как минимум с 4 версии. Может эти товарищи о нем не знают?

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

И то. Ты писал выше, что ни один нормальный проект не использует дизайнер. А пишу, что использует.

rumgot ★★★★★
()
Ответ на: комментарий от Pavval

Я делал гуй в дизайнере с достаточно большим количеством виджетов. Как странно, что УМВР.

ибо дизайнер не даёт нормально реструктурировать гуй

Можно тут подробнее?

rumgot ★★★★★
()
Ответ на: комментарий от Pavval

Я делал достаточно сложный гуй в дизайнере, потребности описывать руками не испытывал. Как сравнивать с дельфями даже не знаю, они мб привычнее, но лэйаутов там не было.

unC0Rr ★★★★★
()
Ответ на: комментарий от Pavval

Qml не может в платформозависимый стиль контролов. Там какой то угробишный материальный дизайн.

ox55ff ★★★★★
()
Ответ на: комментарий от rumgot

любой визувиг традиционно и всегда был для неосиляторов. все эти возгласы о сумашествии противников такого подхода и тому как им все удобно - весьма типичные вскукареки адептов.

С нуля никто в здравом уме и не должен херачить гуй вручную кодом. Исключение - совсем примитивный виджет.

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

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

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