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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перерисовка QGraphicsScene.  (Прочитано 4811 раз)
AlexandrosLiberalis
Гость
« : Август 17, 2014, 14:01 »

Всем привет!

Новичок.
Я делаю программу для рисования графов.
Для рисования на QGraphicsScene есть два класса: Node и Edge.

Эти классы рисуют вершины и дуги соответственно.
Объект класса Node имеет флаг ItemIsMovable.
При добавлении объекта Edge пользователь задаёт начальный и конечный объекты Node, которые в свою очередь дают координаты для рисования линии стрелки объекта Edge.
После перемещения вершин, QGraphicsScene необходимо перерисовать, и пока я для этого использую кнопку на диалоге, в которой пишу код для рисования и в конце scene->update();

Как сделать перерисовку при перемещении вершины или её "отпускании"?

Класс Node уже содержит метод mouseReleaseEvent() и, в моём понимании, его необходимо соединить с каким то слотом в главном диалоге, который в свою очередь всё перерисует.
Подскажите пожалуйста, как это сделать.
Записан
AlexandrosLiberalis
Гость
« Ответ #1 : Август 17, 2014, 14:01 »

В объявлении Node обозначил как сигнал

signals:
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);

В объявлении главного диалога объявил слот

public slots:
void MySlot();

В реализации главного диалога написал:

connect(node, SIGNAL(mouseReleaseEvent(QGraphicsSceneMouseEvent *event)), this, SLOT(MySlot()));

Ещё вычитал, что в объявление класса sender'а нужно добавить Q_OBJECT

Не работает.
Записан
Nidxogg
Гость
« Ответ #2 : Август 17, 2014, 15:50 »

Если надо перерисовать только дуги, связанные с этой вершиной, то посмотри перерисовку стрелок в qt-м примере DiagramScene

P.S.
Цитировать
Ещё вычитал, что в объявление класса sender'а нужно добавить Q_OBJECT

Не работает.
Используй QGraphicsObject
http://qt-project.org/doc/qt-4.8/qgraphicsobject.html

P.P.S.Ещё можно унаследоваться от класса сцены и переопределить там mousereleaseevent
« Последнее редактирование: Август 17, 2014, 15:55 от Nidxogg » Записан
Hrundel
Гость
« Ответ #3 : Август 26, 2014, 20:30 »

Зачем так без знаний фреймворка кидаться на реализацию не самой простой задачки. Почитайте спокойно Шлее - многое проясниться.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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