Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
f
3 июня 2018 г. 18: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().
Возврат 10% от суммы заказа отеля на Booking
Возврат 10% от суммы заказа отеля на Booking
Предлагаем ссылку с 10% возвратом от суммы заказа при бронировании отеля через Booking
5

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

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

P/S/ с работы мне к сожалению не с руки собирать ваш проект, чтобы проверить что там не так.
0
f
  • 4 июня 2018 г. 10: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  вызывать прерывание? Тут есть какие то нюансы?

0

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


У вас в файле реализации добавлено class GraphWidget - а это forward declaration, чаще всего его используют в заголовочном файле, а не в файле реализации. Перекиньте его в заголовочный файл, а в файле cpp дайте инклюд заголовочного файла этого самого класса GraphWidget.
1

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

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

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

0

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
ПМ
18 марта 2019 г. 15:12
Пётр Махнёв

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

  • Результат:50баллов,
  • Очки рейтинга-4
ЯГ
18 марта 2019 г. 7:59
Ян Греку

C++ - Тест 003. Условия и циклы

  • Результат:21баллов,
  • Очки рейтинга-10
МД
15 марта 2019 г. 16:32
Михаил Дементьев

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

  • Результат:60баллов,
  • Очки рейтинга-1
Последние комментарии
16 марта 2019 г. 13:55
Дмитрий

Спасибо за статью. Давно итересует следующий вопрос: с помощью переменных QMAKE_TARGET_COMPANYQMAKE_TARGET_PRODUCTQMAKE_TARGET_DESCRIPTIONможно задать свойства компилируемой программы, о...
JS
12 марта 2019 г. 10:19
Jean Stefanovich

Большое спасибо за разъяснения!
12 марта 2019 г. 10:04
Евгений Легоцкой

Hello, In fact, this functionality or is not implemented, or is not documented. I'm not sure. But I think, that it should be implemented in Text QML Type. Because of we can write text in...
12 марта 2019 г. 9:51
Евгений Легоцкой

Да вы правы. На самом деле проще через QSqlQueryModel, сколько не пытался использовать эти дженерики типо QSqlTableModel и QSqlRelationalTableModel, то всегда упирался в какие-то их ограничени...
JS
12 марта 2019 г. 9:47
Jean Stefanovich

Единицы измерения лежат там же где и названия продуктов. Просто в таблице ингредиенты нет ещё одного столбца, на который можно было бы установить setRelation. Я в итоге в базе создал ещё один ...
Сейчас обсуждают на форуме
17 марта 2019 г. 22:47
Евгений Легоцкой

Добрый день. Вот, нашлось у меня немного времени. Делается это через шаблон проектирования наблюдатель. GraphKS_mfvSlup.zip
ЧГ
15 марта 2019 г. 21:52
Чарльз Грин

спасибо, попробую, отпишусь
m
15 марта 2019 г. 19:41
mihamuz

Сори догадался)
n
12 марта 2019 г. 16:57
newbie.works.with.QT

Большооооое спасибо!!!!!Не передать как я вам благодарен, спасибо что всегда отзываетесь.Теперь я смогу продолжить работу в QT!!! (пробую писать бота (Я как вы могли догадаться немного не пр...
12 марта 2019 г. 13:20
BlinCT

Ну так если у вас есть готовая программа так ей и воспользуйтесь. Вы же написали ее вот и пользуйтесь.
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы