Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > как позиционеруетса QGraphicsScene


Автор: Izabela 1.9.2009, 18:33
Здравствуйте


Может кто-то сможет сказать относительно какова элемента размещена QGraphicsScene и где ее геометрический центр?

 smile Не могу понять.  Если не задавать  sceneRect  тогда все элементы реализованы с помощью классов-потомков класса QGraphicsItem ) рисуются относительно геометрическова центра (0,0) окна , а если указать   sceneRect тогда я не понимаю как оно работает
Код

scene = new QGraphicsScene();
    view = new PlotView();
    view->setScene(scene);
    setCentralWidget(view);


По документации ясно как работает система координат окна и примитива.  Может кто то сможет объяснить как работает сцена. 
Заранее благодарна.

Автор: KL7 4.9.2009, 16:00
На случай, если не удастся вникнуть в документацию или никто из опытных qt-шников не поделится соображениями...
Сейчас как раз работаю со сценой в одном приложении... Так что вот соображения...

Если не задавать sceneRect в самой сцене, то он будет автоматически расширяться (но никак не сужаться), при появлении новых элементов (QGraphicsItem) за пределами текущего sceneRect... В противном случае автоматического обновления не будет и будет предполагаться, что твоя сцена - ето прямоугольник, описываемый полем sceneRect... попытки добавления элементов за пределами этой области не будут вызывать ошибок, но sceneRect обновлен (автоматически) не будет...

Если не задавать sceneRect во вьювере, то он будет получать свежее значение от самой сцены... если же указать, то обновления не будет и вьювер будет работать лишь с указанной частью сцены... Он будет усердно пытаться ее отображать и если сцена маленькая, то он будет проводить выравнивание сцены внутри себя по правилам, заданным в alignment, а если в него часть сцены, ограниченная sceneRect-ом не влазит, то будут появляться скролы...

Мне лично нужно, чтобы сцена динамически расширялась, но симметрично относительно вертикали, чтобы при центральном выравнивании во вьювере ось Oy моей сцены всегда отображалась по центру... Для етого я пока вручную обновляю размеры сцена по сигналу changed() - ничего лучше не придумал...

как-то так... если что-то прояснилось, то пиши, что не понятно (конкретнее), - будем разбираться =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)