我是一个新的 java / qt 程序员,我正在尝试使用 java 和 qt jambi 构建一个 gui。
我在标签内放置了一个像素图,效果很好,但是,现在当我单击标签内的像素图时,我需要获取图像坐标。我不需要 QWidget 坐标。我只需要像素图坐标来处理点击点上的图像。
我想我应该重写mousePressEvent事件,但我不知道如何将它附加到“pixmap onclick”。
你能给我一个简单的例子吗?
我希望我以正确的方式解释了我的问题,我的英语不是很好,对不起!
我想我应该重写 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 中引入的其他方法。
返回鼠标光标的位置,相对于接收事件的小部件。
如果您因鼠标事件而移动小部件,请使用 globalPos() 返回的全局位置来避免晃动。