@blackfishsql00

Как правильно привести тип QGraphicsItem?

Пытаюсь отрисовать граф. Я взял за основу стандартный пример в QT Elastic Nodes Example https://doc.qt.io/qt-5/qtwidgets-graphicsview-elas... и хочу его немного доработать следующим образом. В примере описан класс class Node : public QGraphicsItem и класс class Edge : public QGraphicsItem. Соответственно весь код завязан на данные 2 класса.

Не понимаю как реализовать следующее. Хочу сделать свои классы class NodeСircle : public Node и class NodeSquare : public Node. Внутри данных двух классов будут разные поля и своя логика работы с данными. Ребро может строиться между любыми вариантами данных классов (NodeСircle <--> NodeСircle , NodeSquare <--> NodeSquare , NodeSquare <--> NodeСircle и наоборот). Чтобы построить ребро между двумя объектами, получается нужно передавать указатель на базовый класс как-то ? Не понимаю как должен выглядеть тогда конструктор класса Edge ??

И второй вопрос. Предположим уже есть нарисованный граф. Я правым кликом по элементу на сцены вызываю контекстное меню, допустим кликаю по class NodeСircle : public Node выбираю пункт "Преобразовать в квадрат" и чтобы на его месте появился уже элемент класса class NodeSquare : public Node . Как правильно реализовать данный функционал?
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 2
mindtester
@mindtester
http://iczin.su/hexagram_48
сначала разделите в голове логику и отображение
Ответ написан
@blackfishsql00 Автор вопроса
Сейчас реализовал все с помощью флага и все данные (данные классов потомков) храню в одном классе. И каждый раз приходится проверять этот флаг. Данное решение не очень красивое.... Как сделать правильно !?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы