f
fryn3Маусым 3, 2018, 2: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; так хидер файл можно не добавлять

            Пікірлер

            Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
            Кіріңіз немесе Тіркеліңіз
            AD

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

            • Нәтиже:50ұпай,
            • Бағалау ұпайлары-4
            m
            • molni99
            • Қаз. 26, 2024, 1:37 Т.Ж.

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

            • Нәтиже:80ұпай,
            • Бағалау ұпайлары4
            m
            • molni99
            • Қаз. 26, 2024, 1:29 Т.Ж.

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

            • Нәтиже:20ұпай,
            • Бағалау ұпайлары-10
            Соңғы пікірлер
            ИМ
            Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
            Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
            Evgenii Legotckoi
            Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
            Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
            A
            ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
            Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
            ИМ
            Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
            Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
            d
            dblas5Шілде 5, 2024, 11:02 Т.Ж.
            QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            Енді форумда талқылаңыз
            m
            moogoҚар. 22, 2024, 7:17 Т.Ж.
            Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
            Evgenii Legotckoi
            Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
            добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
            t
            tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
            google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
            NSProject
            NSProjectМаусым 4, 2022, 3:49 Т.Ж.
            Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

            Бізді әлеуметтік желілерде бақылаңыз