Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Bepec от Март 11, 2012, 13:31



Название: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Bepec от Март 11, 2012, 13:31
Приветствую джентельменов и дам.

Вопрос: Как наименее извращённым способом можно выполнить сжатие виджета с компоновщиками до размеров точки? (ну или скажем размеров 10 на 10)

Что мешает: мешает компоновщик, не уменьшающий виджеты ниже минимального значения.


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: GreatSnake от Март 11, 2012, 13:39
Ну дык и измени минимальное значение через QWidget::setMinimumSize().


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Bepec от Март 11, 2012, 13:41
Поясню. Даже если утыкать все виджеты минимал сайзом, компоновщик не даёт ужать виджет.

PS напомню, у всех виджетов изначально minimumSize(0,0).


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: SimpleSunny от Март 11, 2012, 18:27
Поставить maximumSize(10, 10);


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Syveren от Март 11, 2012, 18:47
попробуй  QWidget::setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored)


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Igors от Март 11, 2012, 19:05
Если/пока "есть место" компоновщик стремится к "preferred"
[/offtop]
Возникновение подобной задачи должно насторожить программиста, что-то явно не так, кошка гладится против шерсти


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Bepec от Март 12, 2012, 06:50
Таки в рассуждениях
Цитировать
"Если/пока" есть место
есть одна существенная деталь - места минимальное количество, но дальше он уменьшать не даёт ;)

Спасибо за ответы. Пробую.


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Bepec от Март 12, 2012, 07:06
Установка максимальных значений для всего виджета (10,10) не даёт результатов, ибо компоновщик возвращает значения сразу после установки на минимально видимое для виджетов (270,270 примерно)
Установка политики Ignored даёт результат внизу сообщения.

Но что-то совсем не нравится как оно выглядит ;) (самая извечная проблема)

Вопрос: Можно ли "свернуть" виджет по другому, оставив лишь заголовок окна?



Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: ufna от Март 12, 2012, 07:27
в компоновщике случаем нет заданный margin и подобных свойств?


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Bepec от Март 12, 2012, 07:34
нулевые ;) Это было бы слишком просто.


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Syveren от Март 12, 2012, 10:22
чтобы оставить только заголовок, нужно поставить Ignored также всем виджетам на форме


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Bepec от Март 12, 2012, 10:29
Syveren, если не ставить ВСЕМ игноред, тогда ничего не схлопнется.

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

PS установка Игноред только виджету родителю даёт 0 (нуль) результатов.


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Kolobok от Март 12, 2012, 12:43
Политика в данном случае не играет никакой роли. У компоновщика должны бить нулевые margin и spacing и у всех виджетов minimalSizeHint() должен возвращать QSize(0,0).


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Bepec от Март 12, 2012, 12:49
Собственно все виджеты умерли в точки. (именно благодаря политике ignore)
У компоновщика с радостным ликом стоят все нулевые значения.
Эта ситуация отображена на скрине.


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: ufna от Март 12, 2012, 13:03
код в студию


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Странник от Март 12, 2012, 13:47
чисто из любопытства: зачем сжимать виджет в точку?


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Bepec от Март 12, 2012, 13:51
Чисто из любопытства ;)

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

Появляется полоска заголовка, далее анимированно разворачивается наподобие свитка. Собственно и озадачился на досуге.

Ведь для реализации этого хватить должно буквально 1 функции. Однако тут интересные вещи появляются.


Название: Re: Сжатие виджета в точку или Борьба с компоновщиком.
Отправлено: Bepec от Март 12, 2012, 13:59
Таки удалось заставить его сжаться до заголовка.
Засада оказалось простой - необходимо применить ignore ко всем виджетам, во всех лейаутах убрать все space/margins.

Теперь таки интереснейший вопрос - есть ли возможность сделать то же самое, но сохранить расположение и политику размеров виджетов/поля лейаутов. И не проходить диким циклом по всем элементам :)