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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: АвтоМасштабирование scene во время изменения размеров view  (Прочитано 9797 раз)
AAXEE
Гость
« : Ноябрь 04, 2008, 17:26 »

Имеется
QGraphicsScene scene( QRectF( 0 , 0 , 400 , 400 ) ) ;
QGraphicsView view( &scene ) ;

Размеры view меняются при изменении размеров окна(QSizePolicy::Expanding).
Хотелось бы, что бы scene и его элементы пропорционально масштабировались(т.е. всегда scene занимает весь view).

В Асситэнсе не нашел такого.
Подскажите, как можно сделать?
Спасибо!
Записан
Detonator
Гость
« Ответ #1 : Ноябрь 04, 2008, 20:02 »

Отследить изменение и вручную пересчитать масштаб.
Записан
AAXEE
Гость
« Ответ #2 : Ноябрь 04, 2008, 20:13 »

Да, так можно сделать. Более того скорее всего так и придется делать.
Но при этом придется пересчитывать размеры также всех элементов.
Я думал, что существует более простой способ.
Что-то вроде scene.подогнать_размер( view)
Если кто-то точно знает, что такого нет, напишите пожалуйста.
Записан
mal
Гость
« Ответ #3 : Ноябрь 05, 2008, 09:17 »

Ничего не надо пересчитывать для всех элементов. Изменяется масштаб пропорционально или нет - не есть суть.
Матрица преобразования задается для view - все элементы сцены масштабируются вместе со сценой, соответственно заданной матрице.
Таким образом, если известен коэффициент маштабирования scale
Код:
QMatrix matrix;
matrix.scale(scale, scale);
view->setMatrix(matrix);

А вот если при этом потребуется  при масштабировании сцены оставить неизменным скажем размеры объекта, то придется матрицу преобразования задавать персонально объекту (после преобразования сцены)
Код:
QMatrix matr;
matr.scale(1.0/scale, 1.0/scale);
item->setMatrix(matr);

И посмотрите в сторону функции QGraphicsView::fitInView - если требуется масштабировать во все окно скажем изображение (QGraphicsPixmapItem) - оно самое то, что надо.
Записан
AAXEE
Гость
« Ответ #4 : Ноябрь 05, 2008, 17:49 »

Спасибо=)
А есть ли смысл вводить матрицу?
Ведь можно сразу написать view.scale( scale , scale ) ;
Записан
Detonator
Гость
« Ответ #5 : Ноябрь 05, 2008, 19:48 »

Спасибо=)
А есть ли смысл вводить матрицу?
Ведь можно сразу написать view.scale( scale , scale ) ;

А если потом еще что-нибудь захочешь сделать, опять что то выдумывать. Лучше сделай сразу через матрицу.
Записан
AAXEE
Гость
« Ответ #6 : Ноябрь 05, 2008, 21:01 »

Так и подумал. Благодарю.
Записан
nixman05
Гость
« Ответ #7 : Май 02, 2009, 23:25 »

Есть такой вопрос.

Имеется QTabWidget. На одной из его страниц находится QGraphicsView, в котором отображается содержимое сцены. Когда активна вкладка с QGraphicsView, то при изменении размеров QTabWidget происходит маштабирование содержимого сцены под новые размеры отображения. Это я реализовал.
Но остается следующий баг. Если изменить размеры QTabWidget при активной вкладке без QGraphicsView, то при переключении на вкладку с ним  содержимое сцены не адаптировано под новыер размеры QGraphicsView.

Каким образом сделать так, чтобы содержимое сцены маштабировалось независимо от активной вкладки?
Записан
notnext
Гость
« Ответ #8 : Май 07, 2009, 12:03 »

Есть такой вопрос.

Имеется QTabWidget. На одной из его страниц находится QGraphicsView, в котором отображается содержимое сцены. Когда активна вкладка с QGraphicsView, то при изменении размеров QTabWidget происходит маштабирование содержимого сцены под новые размеры отображения. Это я реализовал.
Но остается следующий баг. Если изменить размеры QTabWidget при активной вкладке без QGraphicsView, то при переключении на вкладку с ним  содержимое сцены не адаптировано под новыер размеры QGraphicsView.

Каким образом сделать так, чтобы содержимое сцены маштабировалось независимо от активной вкладки?

Все зависит от того как Вы реализовали масштабированине при активной вкладке с QGraphicsView.
Если бы был пример кода. Возможно смогу помочь.  Подмигивающий
Записан
ZoRG
Гость
« Ответ #9 : Ноябрь 01, 2009, 15:53 »

QGraphicsView->fitInView(Scene->SceneRect())
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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