Получить OnClick Pixmap координаты Java / QT / QT Jambi

Я новый программист java / qt и пытаюсь построить графический интерфейс, используя java и qt jambi.

Я поместил растровое изображение внутри метки, и оно работает хорошо, но теперь мне нужно получить координаты изображения, когда я нажимаю на растровое изображение внутри метки. Мне не нужны координаты QWidget. Мне просто нужны координаты растрового изображения для работы над изображением в точке нажатия.

Я думаю, что я должен переопределить событие mousePressEvent, но я не знаю, как прикрепить его к "pixmap onclick".

Можете ли вы сделать мне простой пример?

Надеюсь, я правильно объяснил свою проблему, мой английский не изумителен, извините!

1 ответ

Решение

Я думаю, что я должен переопределить событие mousePressEvent, но я не знаю, как прикрепить его к "pixmap onclick".

Вы, кажется, путаете события и сигналы вместе. Первый - это QEvent, второй - сигнал. То, что вам нужно, это первое, а вам не нужно второе.

Вам нужно было бы создать подкласс класса QLabel и написать что-то подобное при написании C++ (не Qt Jambi в Java, но вы можете принять его как псевдокод в любом случае).

#include <QLabel>
#include <QPoint>
#include <QMouseEvent>

class MyLabel : public QLabel
{
    Q_OBJECT
    public:
        MyLabel(QObject *parent) : QLabel(parent)

     ...

     protected:
         void QWidget::mousePressEvent(QMouseEvent * event)
         {
             ...
             QPoint localPosition = event.pos();
             // Work on the desired point
             ...
         }
};

Поэтому, в зависимости от вашего варианта использования, вам нужно будет изучить документацию этих методов:

void QWidget:: mousePressEvent (событие QMouseEvent *) [виртуальная защита]

Этот обработчик события event может быть переопределён в подклассе для получения событий нажатия мыши для виджета.

Если вы создаете новые виджеты в mousePressEvent(), mouseReleaseEvent() может не оказаться там, где вы ожидаете, в зависимости от базовой оконной системы (или оконного менеджера X11), местоположения виджетов и, возможно, большего.

Реализация по умолчанию реализует закрытие всплывающих виджетов, когда вы щелкаете за пределами окна. Для других типов виджетов это ничего не делает.

и затем это метод для получения локальной позиции, который также работает с Qt 4. Вы можете рассмотреть localPos() или другие методы, представленные в Qt 5, если вам нужно больше точности с помощью float и т. д.

QPoint QMouseEvent:: pos () const

Возвращает положение курсора мыши относительно виджета, получившего событие.

Если вы перемещаете виджет в результате события мыши, используйте глобальную позицию, возвращаемую функцией globalPos(), чтобы избежать колебательного движения.

Другие вопросы по тегам