f
fryn33 июня 2018 г. 14:24

Вызов сигнала в mousePressEvent

c++, qt, QGraphicItem

родитель:
// абстрактный класс
class NodeEdgeParent : public QGraphicsItem
{
public:
    NodeEdgeParent(GraphWidget *graphWidget);
    enum { Type = UserType + 1 };
    virtual void setTextContent(QString text) = 0;
    virtual QString textContent() const = 0;
    void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
    GraphWidget *graph;
};
2 дочерних класса:
class Node : public NodeEdgeParent
class Edge : public NodeEdgeParent
Почему я не могу обратиться в NodeEdgeParent::mousePressEvent к полю graph ?
nodeedgeparent.cpp
#include "nodeedgeparent.h"
#include <QDebug>
class GraphWidget;

NodeEdgeParent::NodeEdgeParent(GraphWidget *graphWidget): graph(graphWidget)
{

}

void NodeEdgeParent::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    if (event->button() == Qt::RightButton) {
        qDebug() << "RightButton";
        scene()->clearSelection();
        setSelected(true);
//        emit graph->editItem();
    }
    QGraphicsItem::mousePressEvent(event);
}

Весь проект лежит на github . Задача состоит что бы при нажатии ПКМ на вершине или на дуге вызывался сигнал graph->editItem().
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

5
Evgenii Legotckoi
  • 4 июня 2018 г. 3:16

Мне не нравится то, что у вас имя базового класса и имя поля одинаковые.

Это может вызывать проблемы при компиляции. Переназовите, пожалуйста, поле с имени graph на m_graph, например.
Наверняка конфликт имён.

P/S/ с работы мне к сожалению не с руки собирать ваш проект, чтобы проверить что там не так.
    f
    • 4 июня 2018 г. 6:11

    переименовал. Но все равно, Выводит вот такие ошибки:

    C:\Users\q\Documents\QT Project\elasticnodes\nodeedgeparent.cpp:-1: In member function 'virtual void NodeEdgeParent::mousePressEvent(QGraphicsSceneMouseEvent*)':
    C:\Users\q\Documents\QT Project\elasticnodes\nodeedgeparent.cpp:16: ошибка: invalid use of incomplete type 'class GraphWidget'
    emit m_graph->editItem();
    ^
    C:\Users\q\Documents\QT Project\elasticnodes\nodeedgeparent.cpp:1: In file included from ..\elasticnodes\nodeedgeparent.cpp:1:0:
    C:\Users\q\Documents\QT Project\elasticnodes\nodeedgeparent.h:10: forward declaration of 'class GraphWidget'
    class GraphWidget;
    ^
    Еще вопрос: может ли класс, который не наследуется от QObject  вызывать прерывание? Тут есть какие то нюансы?

      Evgenii Legotckoi
      • 4 июня 2018 г. 6:23
      • (ред.)
      • Ответ был помечен как решение.

      хм. так у вас нет заголовочного файла для GraphWidget. я что-то не обратил внимания на это, пока описание ошибки не кинули.


      У вас в файле реализации добавлено class GraphWidget - а это forward declaration, чаще всего его используют в заголовочном файле, а не в файле реализации. Перекиньте его в заголовочный файл, а в файле cpp дайте инклюд заголовочного файла этого самого класса GraphWidget.
        Evgenii Legotckoi
        • 4 июня 2018 г. 6:29

        Я вообще что-то неправильно понял код поначалу

          f
          • 4 июня 2018 г. 8:53

          да, помогло, я думал раз я написал: class GraphWidget; так хидер файл можно не добавлять

            Комментарии

            Только авторизованные пользователи могут публиковать комментарии.
            Пожалуйста, авторизуйтесь или зарегистрируйтесь
            d
            • dsfs
            • 26 апреля 2024 г. 11:56

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:80баллов,
            • Очки рейтинга4
            d
            • dsfs
            • 26 апреля 2024 г. 11:45

            C++ - Тест 002. Константы

            • Результат:50баллов,
            • Очки рейтинга-4
            d
            • dsfs
            • 26 апреля 2024 г. 11:35

            C++ - Тест 001. Первая программа и типы данных

            • Результат:73баллов,
            • Очки рейтинга1
            Последние комментарии
            k
            kmssr9 февраля 2024 г. 2:43
            Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
            АК
            Анатолий Кононенко5 февраля 2024 г. 9:50
            Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
            EVA
            EVA25 декабря 2023 г. 18:30
            Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
            J
            JonnyJo25 декабря 2023 г. 16:38
            Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
            G
            Gvozdik19 декабря 2023 г. 5:01
            Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
            Сейчас обсуждают на форуме
            G
            Gar22 апреля 2024 г. 12:46
            Clipboard Как скопировать окно целиком в clipb?
            DA
            Dr Gangil Academics20 апреля 2024 г. 14:45
            Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
            a
            a_vlasov14 апреля 2024 г. 13:41
            Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
            Павел Дорофеев
            Павел Дорофеев14 апреля 2024 г. 9:35
            QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
            f
            fastrex4 апреля 2024 г. 11:47
            Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

            Следите за нами в социальных сетях