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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Координаты объекта в QGraphicsScene.  (Прочитано 6253 раз)
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).
Выделил другой эллипс и в параметрах сразу его координаты.

воот, как это можно реализовать? отлавливать мышь по сцене?или как? желательно с примером
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Июнь 19, 2015, 18:25 »

Тут делал: https://github.com/gil9red/CardPreview
У QGraphicsScene отлавливал сигнал changed и определял какой итем поменялся (метод sceneChanged)
Записан

YaTT
Гость
« Ответ #2 : Июнь 19, 2015, 18:53 »

Не могу сделать этот метод =\
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Июнь 19, 2015, 19:25 »

Не могу сделать этот метод =\

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

YaTT
Гость
« Ответ #4 : Июнь 19, 2015, 19:29 »

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

Всё равно не могу
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Июнь 19, 2015, 19:54 »

Понял...
То перечисление описано внутри класса QGraphicsItem: http://code.metager.de/source/xref/lib/qt/src/gui/graphicsview/qgraphicsitem.h
Поэтому, пишите так QGraphicsItem::GraphicsItemChange
Записан

YaTT
Гость
« Ответ #6 : Июнь 19, 2015, 19:58 »

Заработало)
Записан
YaTT
Гость
« Ответ #7 : Июнь 19, 2015, 20:13 »

Тут делал: https://github.com/gil9red/CardPreview
У QGraphicsScene отлавливал сигнал changed и определял какой итем поменялся (метод 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;
   }
}
но, что то не получается  В замешательстве В замешательстве В замешательстве
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #8 : Июнь 19, 2015, 22:44 »

А что не получается?
items пустой?
Записан

YaTT
Гость
« Ответ #9 : Июнь 19, 2015, 23:08 »

А что не получается?
items пустой?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #10 : Июнь 19, 2015, 23:22 »

А что не получается?
items пустой?

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

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

Во-вторых, функция items сцены принимает не QGraphicsEllipseItem, а, например, QRect, чтобы вернуть список итемов, находящихся в той области
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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