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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с обновлением элемента сцены (РЕШЕНО)  (Прочитано 4575 раз)
_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.cpp
« Последнее редактирование: Июнь 17, 2010, 18:51 от _KoT_ » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Июнь 07, 2010, 11:07 »

ensureVisible() будет отрабатывать только, если элемент находится за пределами вьюпорта.

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

Qt 5.11/4.8.7 (X11/Win)
_KoT_
Гость
« Ответ #2 : Июнь 17, 2010, 17:43 »

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


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