o
otvertkaСәуір 27, 2018, 2: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, 3:08 Т.Қ.

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


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

    Спасибо.

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

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

          Evgenii Legotckoi
          • Сәуір 28, 2018, 2:48 Т.Қ.
          • Жауап шешім ретінде белгіленді.

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

            Пікірлер

            Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
            Кіріңіз немесе Тіркеліңіз
            OI
            • Ora Iro
            • Жел. 24, 2024, 5:38 Т.Қ.

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

            • Нәтиже:40ұпай,
            • Бағалау ұпайлары-8
            AD

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

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

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

            • Нәтиже:80ұпай,
            • Бағалау ұпайлары4
            Соңғы пікірлер
            ИМ
            Игорь МаксимовҚар. 22, 2024, 10:51 Т.Қ.
            Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
            Evgenii Legotckoi
            Evgenii LegotckoiҚар. 1, 2024, 12:37 Т.Ж.
            Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
            A
            ALO1ZEҚаз. 19, 2024, 6:19 Т.Қ.
            Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
            ИМ
            Игорь МаксимовҚаз. 5, 2024, 5:51 Т.Қ.
            Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
            d
            dblas5Шілде 5, 2024, 9:02 Т.Қ.
            QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            Енді форумда талқылаңыз
            WD
            Weave DecorЖел. 28, 2024, 2:18 Т.Қ.
            Weave & Decor Weave Decor Where passion for textiles meets innovative design. We specialize in manufacturing a diverse range of high-quality bed sheets, from classic to contemporary, using premium fa…
            n
            nklyЖел. 27, 2024, 10:41 Т.Қ.
            Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. У меня есть Представление QTreeView и древовидная модель QStandardItemModel подключенная к представлению. Итемы в модели QStandardItem. В разных ветках дерева могут быть элементы с одинаковым им…
            Evgenii Legotckoi
            Evgenii LegotckoiМаусым 25, 2024, 1:11 Т.Ж.
            добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
            t
            tonypeachey1Қар. 15, 2024, 5:04 Т.Қ.
            google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
            NSProject
            NSProjectМаусым 4, 2022, 1:49 Т.Қ.
            Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

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