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

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

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

Сообщений: 754



Просмотр профиля WWW
« : Октябрь 01, 2008, 14:46 »

Здравствуйте!


У меня есть виджет, который может менять свой размер. Ну то есть у него может быть два состояния - "свернуто", когда показывается минимум информации, и "развернуто" - когда показывается вся информация.

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


http://i.piccy.kiev.ua/i2/a6/b7/14693bf38409cc92a7ecc5977e14.png

Не могу понять, как делать чтоб окно автоматически уменьшалось.

Нужно какой-то сигнал эмиттить? Или какой-то event использовать? Или надо какой-то метод центрального лайоута вызывать чтобы он пересчитал размещение... У меня два лайаута используется - т.е. "внешний" QVBoxLayout содержит QGridLayout и кнопки OK/Cancel. Так вот размер какого layout надо пересчитывать? Если QGridLayout уменьшится, то ведь это не значит что его ячейка в QVBoxLayout тоже уменьшится?

Каждому виджету - "внутреннему", (с QGridLayout) и "внешнему" (с QVBoxLayout) я установил свойства

Код:
setSizePolicy(QSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum));

однако окно остается такого же вида, как и на третьем рисунке.
Записан

Собираю информацию по крупицам
http://webhamster.ru
spirit
Гость
« Ответ #1 : Октябрь 01, 2008, 14:59 »

нужно для лэйата верхнего уровня установить свойство
Код:
setSizeConstraint(QLayout::SetFixedSize)
пример диалога находится QTDIR/examples/dialogs/extension
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Октябрь 01, 2008, 16:05 »

нужно для лэйата верхнего уровня установить свойство
Код:
setSizeConstraint(QLayout::SetFixedSize)
пример диалога находится QTDIR/examples/dialogs/extension


От спасибо, заработало.

Но чего никак понять не могу - почему для настройки динамического изменения размера, надо устанавливать SetFixedSize? Где тут логика?

Цитировать
QLayout::SetFixedSize

The main widget's size is set to sizeHint(); it cannot be resized at all.

Пробую перевести. Размер основного виджета (видимо того, к которому применяется установка SetFixedSize) устанавливается по принципу sizeHint(); это (что? виджет?) не может изменять размер от всех.

Блин, что же имеется в виду?
Записан

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

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Октябрь 01, 2008, 17:09 »

повсей видимости, он (главный виджет, т.е. на котором этот компоновщик лежит) неможет ресайзится мышкой. Ресайзом управляет функция sizeHint(), наверно так.
Записан

Юра.
kirill
Гость
« Ответ #4 : Октябрь 02, 2008, 05:58 »


Цитировать
QLayout::SetFixedSize

The main widget's size is set to sizeHint(); it cannot be resized at all.

Пробую перевести. Размер основного виджета (видимо того, к которому применяется установка SetFixedSize) устанавливается по принципу sizeHint(); это (что? виджет?) не может изменять размер от всех.

Блин, что же имеется в виду?


sizeHint - это размер, который менеджер компоновки считает оптимальным. Вот ты пихнул 2 виджета в лайаут - установился определенный размер. Этот размер определяет sizeHint.
Записан
12d3
Гость
« Ответ #5 : Октябрь 02, 2008, 09:22 »

QSizePolicy::Fixed - размер виджета всегда такой, который возвращает sizeHint()
QSizePolicy::Minimum - размер виджета не может быть меньше, чем возвращает sizeHint(). А больше - легко может быть. Потому он и оставался увеличенным.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Октябрь 02, 2008, 12:55 »

Небольшая поправка к переводу:

Цитировать
...it cannot be resized at all.

Цитировать
не может изменять размер от всех.

Цитировать
...размер не может быть изменен вовсе.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
crocus13
Гость
« Ответ #7 : Октябрь 03, 2008, 11:55 »

Это решение для форм основанных на QWidget & QDialog, а как быть если форма от QMainWindow?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #8 : Октябрь 03, 2008, 14:23 »

Ну блин, опять формы! В Qt есть ВИДЖЕТЫ! Базовый класс - QWidget, QDialog и QMainWindow порождены от него. По сути, QMainWindow это QWidget с добавкой статус-бара, тулбара, дока и меню.
Записан
crocus13
Гость
« Ответ #9 : Октябрь 03, 2008, 14:44 »

и что?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #10 : Октябрь 03, 2008, 14:49 »

а то, что все методы по изменению размеров определены в QWidget. Производные классы их наследуют. Сложности могут возникнуть только с понятием стратегий изменения размера и перестройкой мышления после Дельфи.
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #11 : Октябрь 03, 2008, 15:53 »

Так переопредели sizeHint  и рассчитай размер. Это будет сумма меню, статус-бара и центрального виджета. Как вариант, центральный виджет строить с использованием Layout.
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #12 : Октябрь 03, 2008, 16:22 »

кому-то похоже не ясен ответ. четко сказано - в центральном виджете используй Layout's.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #13 : Октябрь 03, 2008, 16:23 »

Это решение для форм основанных на QWidget & QDialog, а как быть если форма от QMainWindow?

А в чем проблема использования QMainWindow?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
crocus
Гость
« Ответ #14 : Октябрь 03, 2008, 16:40 »

Проблемы использования QMainWindow нет, проблема в динамическом изменении размера QMainWindow форм .
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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