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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Пропорциональное изменение размеров окна  (Прочитано 15957 раз)
PulSar.CE3194694
Гость
« : Апрель 09, 2010, 22:15 »

Добрый день!
Есть проблема. Делаю программу на Qt4.6, в ней важно, чтобы размеры окна менялись пропорционально друг другу. Например, у меня есть окно с соотношением сторон 16:9. Я меняю, допустим, ширину окна, и хочу, чтобы и высота тоже поменялась согласно соотношению. Тоже и с высотой. Вот не знаю как это сделать. В справке никаких методов для этого не нашел. А если в справки и есть подобные функции, то не понятно как работают. И как самому сделать, тоже без понятия. Вроде написал что-то, а работает через...  Я подозреваю, что нужно использовать методы setHeight() и setWidth(). Помогите плиз, написать код для этого.

ЗЫ изменяю размеры главного окна.
Заранее Спасибо.
Записан
alexman
Гость
« Ответ #1 : Апрель 09, 2010, 22:16 »

Уже обсуждалось! Поищи по форуму!
Записан
PulSar.CE3194694
Гость
« Ответ #2 : Апрель 09, 2010, 22:33 »

Посмотрел, тема-то одна, да и то не решенная. Примерно подобный код делал, но приложение из-за него начинает так тормозить при ресайзе окна. Плюс появляется бесконечное уменьшение окна. Что делать?
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #3 : Апрель 10, 2010, 00:31 »

может так:
Записан
PulSar.CE3194694
Гость
« Ответ #4 : Апрель 10, 2010, 19:54 »

Спасибо! Работает и без тормозов. Единственное что не устраивает, это возможность изменения только ширины. А высоту тоже нужно сделать изменяемой. Можно ли это как исправить? Улыбающийся


И почему для QWidget нет функций setHeight() и setWidth()??
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #5 : Апрель 10, 2010, 19:56 »

Цитировать
Спасибо! Работает и без тормозов. Единственное что не устраивает, это возможность изменения только ширины.
имеешь ввиду возм. пропорционального изменения размера таская за правый бок или уголок внизу? Ведь и ширина и высота должна меняться.

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

Все методы по установке размеров для виджета ищи в geometry()
Записан
PulSar.CE3194694
Гость
« Ответ #6 : Апрель 10, 2010, 22:42 »

Просто в коде записано setFixedHeight(.......). Когда приложение запускаем, то за низ растянуть окно нельзя. Потому что высота фиксирована. По аналогии я делал и с высотой - setFixedWidth(.......). Но если эти две функции обе написать, то окно вообще нельзя будет растянуть. Размеры фиксированы. Поэтому и спрашиваю, почему нет функций setHeight() и setWidth().
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #7 : Апрель 10, 2010, 23:07 »

Код
C++ (Qt)
QRect rect = geometry();
rect.setHeight( event->size().width() / m_fScaleFactor );
setGeometry( rect );
 


но это как следует все надо проверять применяя именно для пропорционального ресайза - может что-то будет дергаться или мигать...
Записан
KuZ
Гость
« Ответ #8 : Апрель 11, 2010, 00:07 »

может так:


Странно как-то может это только у меня, но когда изменил размер запущенной проги то размер "плавно" изменяет свой размер на начальный. 
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #9 : Апрель 11, 2010, 00:12 »

А вполне возможно что не только у вас так - какая система? Я пробовал в Linux - может этот метод в Windows вообще не покатит...
Записан
PulSar.CE3194694
Гость
« Ответ #10 : Апрель 11, 2010, 07:38 »

Это не странно. При растяжении он вновь возвращает высоту к фиксированной. Кстати если использовать setMinimumHeight(), то размер остается, только вот окно уже не сожмешь....))

ЗЫ Я на Семерке.
ЗЫЫ Код с Qrect не работает((
« Последнее редактирование: Апрель 11, 2010, 09:02 от PulSar.CE3194694 » Записан
shirushizo
Гость
« Ответ #11 : Апрель 12, 2010, 06:49 »

Переопредели resizeEvent()  Подмигивающий
Записан
PulSar.CE3194694
Гость
« Ответ #12 : Апрель 12, 2010, 20:53 »

Так так и делаю, не помогает.
Нет команд, которые непосредственно задают по отдельности ширину и высоту окна. Какие хочешь, не только фиксированные и минимальные.
Записан
shirushizo
Гость
« Ответ #13 : Апрель 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 схавтишь
Записан
PulSar.CE3194694
Гость
« Ответ #14 : Апрель 13, 2010, 19:05 »

Спасибо, попробую.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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