Настроить наследование класса от QGraphicsRectItem - PullRequest
0 голосов
/ 12 марта 2019

У меня есть несколько прямоугольников в моей программе, и я хотел бы, чтобы они отправляли уведомления, когда их позиции были изменены. Для этого я создаю класс с именем MacroNodeGraph, унаследованный от класса QGraphicsRectItem, и переопределяю его функцию itemChange(). Но VS выдает исключение, когда я пытаюсь выполнить свою функцию инициализации. Кто-нибудь знает в чем проблема в моей программе?

Создание класса MacroNodeGraph:

class MacroNodeGraph : public QGraphicsRectItem
{
public:
    MacroNodeGraph()
    {

    }

    void Initialization(float x, float y, int node_id)
    {
        setRect(x, y, 10, 10);
        setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemSendsGeometryChanges);
        setBrush(QBrush(Qt::yellow));
        setData(1, "MacroNode");
        setData(2, node_id);
    }

    QVariant itemChange(GraphicsItemChange change, const QVariant &data)
    {
        if (change == ItemPositionHasChanged)
        {
            //do something

        }
    }
};

Создать экземпляр и инициализировать:

MacroNodeGraph *graph;
void CreateGraph()
{
    graph->Initialization(10 * x - 5, -10 * y - 5, node_id);
}

exception

1 Ответ

0 голосов
/ 13 марта 2019

Похоже, вы неправильно понимаете создание экземпляра класса MacroNodeGraph.

MacroNodeGraph *graph;

не создает MacroNodeGraph объект, только указатель, это

MacroNodeGraph *graph = new MacroNodeGraph();

создаст экземпляр MacroNodeGraph и указатель на него, который затем позволит вам вызвать соответствующий метод (ы). Это только часть вопроса, код

void CreateGraph()
{
    graph->Initialization(10 * x - 5, -10 * y - 5, node_id);
}

на самом деле ничего не инициализирует, он просто создает функцию, которую затем можно вызывать для инициализации, но только в том случае, если объект MacroNodeGraph имеет соответствующую область видимости.

MacroNodeGraph *graph = new MacroNodeGraph();
graph->initialization(10 * x - 5, -10 * y - 5, node_id);

Будет "Создать экземпляр и инициализировать", как вы говорите в вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...