Название: Пропорциональное изменение размеров окна Отправлено: PulSar.CE3194694 от Апрель 09, 2010, 22:15 Добрый день!
Есть проблема. Делаю программу на Qt4.6, в ней важно, чтобы размеры окна менялись пропорционально друг другу. Например, у меня есть окно с соотношением сторон 16:9. Я меняю, допустим, ширину окна, и хочу, чтобы и высота тоже поменялась согласно соотношению. Тоже и с высотой. Вот не знаю как это сделать. В справке никаких методов для этого не нашел. А если в справки и есть подобные функции, то не понятно как работают. И как самому сделать, тоже без понятия. Вроде написал что-то, а работает через... Я подозреваю, что нужно использовать методы setHeight() и setWidth(). Помогите плиз, написать код для этого. ЗЫ изменяю размеры главного окна. Заранее Спасибо. Название: Re: Пропорциональное изменение размеров окна Отправлено: alexman от Апрель 09, 2010, 22:16 Уже обсуждалось! Поищи по форуму!
Название: Re: Пропорциональное изменение размеров окна Отправлено: PulSar.CE3194694 от Апрель 09, 2010, 22:33 Посмотрел, тема-то одна, да и то не решенная. Примерно подобный код делал, но приложение из-за него начинает так тормозить при ресайзе окна. Плюс появляется бесконечное уменьшение окна. Что делать?
Название: Re: Пропорциональное изменение размеров окна Отправлено: break от Апрель 10, 2010, 00:31 может так:
Название: Re: Пропорциональное изменение размеров окна Отправлено: PulSar.CE3194694 от Апрель 10, 2010, 19:54 Спасибо! Работает и без тормозов. Единственное что не устраивает, это возможность изменения только ширины. А высоту тоже нужно сделать изменяемой. Можно ли это как исправить? :)
И почему для QWidget нет функций setHeight() и setWidth()?? Название: Re: Пропорциональное изменение размеров окна Отправлено: break от Апрель 10, 2010, 19:56 Цитировать Спасибо! Работает и без тормозов. Единственное что не устраивает, это возможность изменения только ширины. имеешь ввиду возм. пропорционального изменения размера таская за правый бок или уголок внизу? Ведь и ширина и высота должна меняться.Сделать чтобы можно было таскать и за нижний и верхний края думаю можно по аналогии. Все методы по установке размеров для виджета ищи в geometry() Название: Re: Пропорциональное изменение размеров окна Отправлено: PulSar.CE3194694 от Апрель 10, 2010, 22:42 Просто в коде записано setFixedHeight(.......). Когда приложение запускаем, то за низ растянуть окно нельзя. Потому что высота фиксирована. По аналогии я делал и с высотой - setFixedWidth(.......). Но если эти две функции обе написать, то окно вообще нельзя будет растянуть. Размеры фиксированы. Поэтому и спрашиваю, почему нет функций setHeight() и setWidth().
Название: Re: Пропорциональное изменение размеров окна Отправлено: break от Апрель 10, 2010, 23:07 Код
но это как следует все надо проверять применяя именно для пропорционального ресайза - может что-то будет дергаться или мигать... Название: Re: Пропорциональное изменение размеров окна Отправлено: KuZ от Апрель 11, 2010, 00:07 может так: Странно как-то может это только у меня, но когда изменил размер запущенной проги то размер "плавно" изменяет свой размер на начальный. Название: Re: Пропорциональное изменение размеров окна Отправлено: break от Апрель 11, 2010, 00:12 А вполне возможно что не только у вас так - какая система? Я пробовал в Linux - может этот метод в Windows вообще не покатит...
Название: Re: Пропорциональное изменение размеров окна Отправлено: PulSar.CE3194694 от Апрель 11, 2010, 07:38 Это не странно. При растяжении он вновь возвращает высоту к фиксированной. Кстати если использовать setMinimumHeight(), то размер остается, только вот окно уже не сожмешь....))
ЗЫ Я на Семерке. ЗЫЫ Код с Qrect не работает(( Название: Re: Пропорциональное изменение размеров окна Отправлено: shirushizo от Апрель 12, 2010, 06:49 Переопредели resizeEvent() ;)
Название: Re: Пропорциональное изменение размеров окна Отправлено: PulSar.CE3194694 от Апрель 12, 2010, 20:53 Так так и делаю, не помогает.
Нет команд, которые непосредственно задают по отдельности ширину и высоту окна. Какие хочешь, не только фиксированные и минимальные. Название: Re: Пропорциональное изменение размеров окна Отправлено: shirushizo от Апрель 13, 2010, 06:49 Так
this->resize(event->size().width(),event->size().width()*9/16); или так: this->resize(event->size().height()*16/9,event->size()); только надо будет QEvent::ignore() куда-то вставить, а то endless loop схавтишь Название: Re: Пропорциональное изменение размеров окна Отправлено: PulSar.CE3194694 от Апрель 13, 2010, 19:05 Спасибо, попробую.
Название: Re: Пропорциональное изменение размеров окна Отправлено: dox от Июль 23, 2010, 17:51 Приветствую. Код что с resize вызывает рекурсию. Кто может подсказать куда копать чтобы сделать пропорциональный ресайз окна?
Спасибо. Название: Re: Пропорциональное изменение размеров окна Отправлено: dox от Июль 23, 2010, 21:14 Код: void mwindow::resizeEvent(QResizeEvent *event) Вот код. но при выполнении окно уменьшается до исходных размеров плюс один. Причем одна особенность проявляется при просмотре дэбаг вывода: сообщения resize вызываются после того как отпущена кнопка мыши после ресайза. Причем в любом случае ресайз происходит на 1 пиксел. Если раскоментить QApplication::processEvents();, то ресайз при увеличении окна срабатывает нормально при отпускании клавиши. Однако при уменьшении выдает ошибку. Кто что думает по этому вопросу? Название: Re: Пропорциональное изменение размеров окна Отправлено: JamS007 от Июль 23, 2010, 23:59 Вот, от нечего делать написал вам примерчик. На идеальность не претендую :) Писал в пятницу вечером. Тестил только под линуксом.
Из-за рекурсии иногда притормаживает, но это, думаю, можно победить. Мне просто уже спать охота :) Название: Re: Пропорциональное изменение размеров окна Отправлено: dox от Июль 24, 2010, 07:46 Приветствую. Попробовал пример, не работает. Думаю что вообще говоря вызов resize из resizeEvent не оч. хорошая идея. Как я понял resizeEvent вызывается когда размеры уже заданы для окна. Если у кого есть работающий пример, давайте его в вики выложим. Сейчас я изучаю вариант ресайза через winEventFilter.
Название: Re: Пропорциональное изменение размеров окна Отправлено: dox от Июль 24, 2010, 11:02 Вопрос решил с помощью winEvent для виджета.
Название: Re: Пропорциональное изменение размеров окна Отправлено: ufna от Октябрь 29, 2010, 15:17 Вышел через поиск. Для этих же целей: http://ufna.ru/2010/08/16/qt-proportional-window-resize-win
|