o
otvertka27 апреля 2018 г. 14:40

mousePressEvent

Здравствуйте.

Я написал функцию которая при нажатии на кнопку мыши рисует круг. Саму функцию реализовал в "MainWindow".
 
MainWindow.cpp
....
ui->setupUi(this);
    scene = new QGraphicsScene(this);
    ui->drawWindow->setScene(scene);
...
...void MainWindow::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    scene->addEllipse(event->pos().x(),
                      event->pos().y(),
                      10,10,
                      QPen(Qt::NoPen),
                      QBrush(Qt::green));

}...

MainWindow.h
...void mousePressEvent(QGraphicsSceneMouseEvent *event);...
При нажатии функция даже не вызывается. В чем проблема.
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

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

5
Evgenii Legotckoi
  • 27 апреля 2018 г. 15:08

Здравствуйте.


У вас неправильная сигнатура метода
void MainWindow::mousePressEvent(QGraphicsSceneMouseEvent *event)
Нужно заменить на
void MainWindow::mousePressEvent(QMouseEvent* event)
    o
    • 27 апреля 2018 г. 15:38

    Спасибо.

    Но теперь два вопроса.
    Во-первых почему QmouseEvent?
    Во-вторых при нажатии система координат работает на целое окно, но при рисовании система координат работает на graphics View. Из-за чего точка смещена на пару десятков пикселей.
      Evgenii Legotckoi
      • 27 апреля 2018 г. 16:07
      1. Потому, что вы переопределяете метод класса, наследованного от QWidget и у него метод реализован с QMouseEvent, а вы дёрнули методы из графической сцены, которая наследована напрямую от QObject и реализует свой собственный метод mousePressEvent, который в своб очередь имеет другую сигнатуру.
        Фактически вы не переопределили метод, как требовалось а написали его перегрузку, которая нигде в стеке событий не вызывается в принципе.
        Виджет окна и графическая сцена это совершенно различные сущности.
      2. Виджет окна и графическая сцена имеют свои собственные системы координат. Нужно либо маппить координаты из системы координат окна в систему координат графической сцены, что заведомо неправильно, вы же кликаете по графической сцене в первую очередь.
        Поэтому нужно наследоваться от графической сцены, как было показано в уроке.
        o
        • 28 апреля 2018 г. 13:39

        Создал новый класс который наследуется от QGraphicsScene. Внутри класса переопределил нажатие мыши.(как в уроке). Но при сборке проекта возникает ошибка "неразрешенный внешний символ ...drawmouse::drawmous(Qobject) в функции mainwindow::mainwindow(QWidget)".

          Evgenii Legotckoi
          • 28 апреля 2018 г. 14:48
          • Ответ был помечен как решение.

          очистить проект, удалить build папку, проверить, чтобы метод был реализован. И что это за метод drawmouse? Вообще, показывайте код.

            Комментарии

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

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

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

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

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

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

            • Результат:73баллов,
            • Очки рейтинга1
            Последние комментарии
            k
            kmssr9 февраля 2024 г. 4:43
            Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
            АК
            Анатолий Кононенко5 февраля 2024 г. 11:50
            Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
            EVA
            EVA25 декабря 2023 г. 20:30
            Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
            J
            JonnyJo25 декабря 2023 г. 18:38
            Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
            G
            Gvozdik19 декабря 2023 г. 7:01
            Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
            Сейчас обсуждают на форуме
            G
            Gar22 апреля 2024 г. 14:46
            Clipboard Как скопировать окно целиком в clipb?
            DA
            Dr Gangil Academics20 апреля 2024 г. 16: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 г. 15:41
            Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
            Павел Дорофеев
            Павел Дорофеев14 апреля 2024 г. 11:35
            QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
            f
            fastrex4 апреля 2024 г. 13:47
            Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

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