Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: AAXEE от Ноябрь 04, 2008, 17:26



Название: АвтоМасштабирование scene во время изменения размеров view
Отправлено: AAXEE от Ноябрь 04, 2008, 17:26
Имеется
QGraphicsScene scene( QRectF( 0 , 0 , 400 , 400 ) ) ;
QGraphicsView view( &scene ) ;

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

В Асситэнсе не нашел такого.
Подскажите, как можно сделать?
Спасибо!


Название: Re: АвтоМасштабирование scene во время изменения размеров view
Отправлено: Detonator от Ноябрь 04, 2008, 20:02
Отследить изменение и вручную пересчитать масштаб.


Название: Re: АвтоМасштабирование scene во время изменения размеров view
Отправлено: AAXEE от Ноябрь 04, 2008, 20:13
Да, так можно сделать. Более того скорее всего так и придется делать.
Но при этом придется пересчитывать размеры также всех элементов.
Я думал, что существует более простой способ.
Что-то вроде scene.подогнать_размер( view)
Если кто-то точно знает, что такого нет, напишите пожалуйста.


Название: Re: АвтоМасштабирование scene во время изменения размеров view
Отправлено: mal от Ноябрь 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) - оно самое то, что надо.


Название: Re: АвтоМасштабирование scene во время изменения размеров view
Отправлено: AAXEE от Ноябрь 05, 2008, 17:49
Спасибо=)
А есть ли смысл вводить матрицу?
Ведь можно сразу написать view.scale( scale , scale ) ;


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

А если потом еще что-нибудь захочешь сделать, опять что то выдумывать. Лучше сделай сразу через матрицу.


Название: Re: АвтоМасштабирование scene во время изменения размеров view
Отправлено: AAXEE от Ноябрь 05, 2008, 21:01
Так и подумал. Благодарю.


Название: Re: АвтоМасштабирование scene во время изменения размеров view
Отправлено: nixman05 от Май 02, 2009, 23:25
Есть такой вопрос.

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

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


Название: Re: АвтоМасштабирование scene во время изменения размеров view
Отправлено: notnext от Май 07, 2009, 12:03
Есть такой вопрос.

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

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

Все зависит от того как Вы реализовали масштабированине при активной вкладке с QGraphicsView.
Если бы был пример кода. Возможно смогу помочь.  ;)


Название: Re: АвтоМасштабирование scene во время изменения размеров view
Отправлено: ZoRG от Ноябрь 01, 2009, 15:53
QGraphicsView->fitInView(Scene->SceneRect())