F
FidanСәуір 26, 2018, 1:32 Т.Қ.

QGraphicsItem

Qt, QGraphicItem

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

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

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

7
Evgenii Legotckoi
  • Сәуір 26, 2018, 2:32 Т.Қ.

Добрый день!

Рисование просто линий между item объектами обсуждалось вот в этом топике, посмотрите пожалуйста там

Что касается обработки клика, то вам нужно переопределять метод mouseReleaseEvent и в нём испускать сигнал, который сообщит, что данный объект кликнули. Чтобы графические объекты могли испускать сигналы, необходимо, чтобы они были наследованы от QObject . Подробнее о сигналах для графических item `ов можете почитать вот здесь .

Когда добавляете item на графическую сцену, обязательно подключайте его к слоту, который будет принимать сигнал о том, что по этому item `у кликнули.
Этот слот может быть расположен как в классе графической сцены, так и в другом классе. Смотре где вы добавляете item на графическую сцену.

Когда item испускает сигнал о клике, то сохраняем указатель с помощью метода sender() - он возвратит указатель на источник сигнала. Когда кликаем на второй сохраняем указатель во вторую переменную, потому берём их местоположение и рисуем линию.
    F
    • Сәуір 26, 2018, 3:32 Т.Қ.

    Да, все отлично работает. Но как в данном случае удалить эту кривую. На сами итемы я это сделал в методе класса при нажатии ПКМ.

      Evgenii Legotckoi
      • Сәуір 26, 2018, 3:47 Т.Қ.
      • (өңделген)

      А вы создайте класс кривой, аналогично, как сделано для item объектов, и также проверяйте щелчки мыши. Можно наследоваться от класса кривой и QObject для этого, то есть применить множественное наследование.

        F
        • Сәуір 26, 2018, 3:52 Т.Қ.

        Точно!! Спасибо большое! Очень помогли

          F
          • Сәуір 27, 2018, 2:26 Т.Ж.

          Все оказалось не так просто. При создании нового объекта класса кривой мы указываем его позицию на сцене при помощи метода setPos куда передаем координаты одной точки, а ведь для кривой нужны координаты начала и конца. Координаты итемов по которым был произведен щелчок уже имеются и их два - как вы и советовали ранее. Как быть в данной ситуации?

            Evgenii Legotckoi
            • Сәуір 27, 2018, 3:17 Т.Ж.

            А вы какой класс в качестве базового исползовали для кривой?
            QGraphicsLineItem?
            у него есть метод void QGraphicsLineItem::setLine(qreal x1 , qreal y1 , qreal x2 , qreal y2 ) , в который можно передать координаты, которые вы получили ранне при клике по тем item`ам.

              F
              • Сәуір 27, 2018, 4:17 Т.Ж.

              Все ОК. Спасибо!

                Пікірлер

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

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

                • Нәтиже:66ұпай,
                • Бағалау ұпайлары-1
                t

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

                • Нәтиже:33ұпай,
                • Бағалау ұпайлары-10
                t

                Qt - Тест 001. Сигналы и слоты

                • Нәтиже:52ұпай,
                • Бағалау ұпайлары-4
                Соңғы пікірлер
                G
                GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
                Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
                d
                dblas5Шілде 5, 2024, 11:02 Т.Ж.
                QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                k
                kmssrАқп. 8, 2024, 6:43 Т.Қ.
                Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                АК
                Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
                Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                Енді форумда талқылаңыз
                Evgenii Legotckoi
                Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                F
                FynjyШілде 22, 2024, 4:15 Т.Ж.
                при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
                BlinCT
                BlinCTМаусым 25, 2024, 1 Т.Ж.
                Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
                BlinCT
                BlinCTМамыр 5, 2024, 5:46 Т.Ж.
                Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
                Evgenii Legotckoi
                Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
                Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

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