2

我是一个新的 java / qt 程序员,我正在尝试使用 java 和 qt jambi 构建一个 gui。

我在标签内放置了一个像素图,效果很好,但是,现在当我单击标签内的像素图时,我需要获取图像坐标。我不需要 QWidget 坐标。我只需要像素图坐标来处理点击点上的图像。

我想我应该重写mousePressEvent事件,但我不知道如何将它附加到“pixmap onclick”。

你能给我一个简单的例子吗?

我希望我以正确的方式解释了我的问题,我的英语不是很好,对不起!

4

1 回答 1

1

我想我应该重写 mousePressEvent 事件,但我不知道如何将它附加到“pixmap onclick”。

您似乎将事件和信号混淆在一起。前者是一个QEvent,后者是一个信号。你需要的是前者,你不需要后者。

在编写 C++ 时,您需要子类化 QLabel 类并编写类似的内容(不是 Java 中的 Qt Jambi,但您可以将其视为伪代码)。

#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 中引入的其他方法。

QPoint QMouseEvent::pos() 常量

返回鼠标光标的位置,相对于接收事件的小部件。

如果您因鼠标事件而移动小部件,请使用 globalPos() 返回的全局位置来避免晃动。

于 2014-01-11T17:45:30.440 回答