Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: YaTT от Июнь 19, 2015, 16:11



Название: Координаты объекта в QGraphicsScene.
Отправлено: YaTT от Июнь 19, 2015, 16:11
Добавляю на сцену объекты (эллипсы, код ниже).
Код
C++ (Qt)
 
ellipse = scene->addEllipse(x-d/2,y-d/2,d,d,QPen(Qt::black),QBrush(Qt::yellow));
ellipse-> setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
 
как сделать так, чтобы при перемещении объекта, менялись X и Y в параметрах (рис. 1.)
т.е. я выделил первый эллипс и перенёс его на (100,200), и в параметрах X и Y тоже должны стать (100,200).
Выделил другой эллипс и в параметрах сразу его координаты.

воот, как это можно реализовать? отлавливать мышь по сцене?или как? желательно с примером


Название: Re: Координаты объекта в QGraphicsScene.
Отправлено: gil9red от Июнь 19, 2015, 18:25
Тут делал: https://github.com/gil9red/CardPreview
У QGraphicsScene отлавливал сигнал changed и определял какой итем поменялся (https://github.com/gil9red/CardPreview/blob/master/designcardmodel.cpp) (метод sceneChanged)


Название: Re: Координаты объекта в QGraphicsScene.
Отправлено: YaTT от Июнь 19, 2015, 18:53
Не могу сделать этот метод =\


Название: Re: Координаты объекта в QGraphicsScene.
Отправлено: gil9red от Июнь 19, 2015, 19:25
Не могу сделать этот метод =\

приинклудьте QGraphicsItem


Название: Re: Координаты объекта в QGraphicsScene.
Отправлено: YaTT от Июнь 19, 2015, 19:29
приинклудьте QGraphicsItem

Всё равно не могу


Название: Re: Координаты объекта в QGraphicsScene.
Отправлено: gil9red от Июнь 19, 2015, 19:54
Понял...
То перечисление описано внутри класса QGraphicsItem: http://code.metager.de/source/xref/lib/qt/src/gui/graphicsview/qgraphicsitem.h
Поэтому, пишите так QGraphicsItem::GraphicsItemChange


Название: Re: Координаты объекта в QGraphicsScene.
Отправлено: YaTT от Июнь 19, 2015, 19:58
Заработало)


Название: Re: Координаты объекта в QGraphicsScene.
Отправлено: YaTT от Июнь 19, 2015, 20:13
Тут делал: https://github.com/gil9red/CardPreview
У QGraphicsScene отлавливал сигнал changed и определял какой итем поменялся (https://github.com/gil9red/CardPreview/blob/master/designcardmodel.cpp) (метод sceneChanged)
Как я понял, мне нужно юзать вот этот код

Код
C++ (Qt)
void MainWindow::sceneChanged (const QList<QGraphicsEllipseItem> & region)
{
 
   if (region.length() == 2)
   {
       QList <QGraphicsItem *> items = scene->items(region[0]);
       if (items.isEmpty())
           return;
   }
}
но, что то не получается  :-\ :-\ :-\


Название: Re: Координаты объекта в QGraphicsScene.
Отправлено: gil9red от Июнь 19, 2015, 22:44
А что не получается?
items пустой?


Название: Re: Координаты объекта в QGraphicsScene.
Отправлено: YaTT от Июнь 19, 2015, 23:08
А что не получается?
items пустой?


Название: Re: Координаты объекта в QGraphicsScene.
Отправлено: gil9red от Июнь 19, 2015, 23:22
А что не получается?
items пустой?

Блин, вы хоть в документацию смотрите и если копируете из моего кода, то правильно...

Ну во-первых, у меня слот принимает такие параметры: const QList<QRectF> & region
Потому-что, слот ловит сигнал от сцены: connect(scene, SIGNAL(changed(QList<QRectF>)), SLOT(sceneChanged(QList<QRectF>)));

Во-вторых, функция items  (http://doc.qt.io/qt-4.8/qgraphicsscene.html#items-10)сцены принимает не QGraphicsEllipseItem, а, например, QRect, чтобы вернуть список итемов, находящихся в той области