Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: _KoT_ от Июнь 06, 2010, 14:07



Название: Проблема с обновлением элемента сцены (РЕШЕНО)
Отправлено: _KoT_ от Июнь 06, 2010, 14:07
Имеется класс spuroNeMi наследующий QGraphicsItem. Если быть точным, то иерархия следующая QGraphicsItem->spuro->spuroNeMi.
В нём метод:
Код:
void spuroNeMi::difiniP1(const QPointF & p){
prepareGeometryChange();
P1 = p;
// Прокручиваю карту, чтобы не скрывать последнюю точку.
this->scene()->views()[0]->ensureVisible(p.x() * skalo, p.y() * skalo, 1, 1);
}
По идеи при его вызове должна обновляться сцена. Есть ещё несколько подобных методов, и не один из них не вызывает обновление сцены.
Если изменить масштаб, сцена обновится, и станут видны изменения элемента.
Пробовал добвлять вызов update() :
Код:
void spuroNeMi::difiniP1(const QPointF & p){
prepareGeometryChange();
P1 = p;
// Прокручиваю карту, чтобы не скрывать последнюю точку.
this->scene()->views()[0]->ensureVisible(p.x() * skalo, p.y() * skalo, 1, 1);
update();
}
Без изменений.
boundingRect реализован следующим образом:
Код:
QRectF spuroNeMi::boundingRect() const{
QPolygonF p;
p<<P1<<P2<<P3;
return (SP.boundingRect() | p.boundingRect());
}
Подскажите, как сделать, чтобы обновлялась сцена.
Если кому то не лень смотреть весь код, вот ссылки: http://code.google.com/p/optimizationmethods/source/browse/trunk/optimizationmethods/src/spuroNeMi.h (http://code.google.com/p/optimizationmethods/source/browse/trunk/optimizationmethods/src/spuroNeMi.h), http://code.google.com/p/optimizationmethods/source/browse/trunk/optimizationmethods/src/spuroNeMi.cpp (http://code.google.com/p/optimizationmethods/source/browse/trunk/optimizationmethods/src/spuroNeMi.cpp)


Название: Re: Проблема с обновлением элемента сцены
Отправлено: GreatSnake от Июнь 07, 2010, 11:07
ensureVisible() будет отрабатывать только, если элемент находится за пределами вьюпорта.

Чего-то google не хочет показывать ваши исходники.


Название: Re: Проблема с обновлением элемента сцены
Отправлено: _KoT_ от Июнь 17, 2010, 17:43
Обновлять он будет благодаря prepareGeometryChange();
Ссылка на документацию: http://doc.crossplatform.ru/qt/4.6.x/qgraphicsitem.html#prepareGeometryChange
Ошибка была из-за забытого макроса Q_OBJECT в описании класса. Сейчас в хранилище уже исправленная версия.
GreatSnake, спасибо за беспокойство.)