我是一个新的java / qt程序员,我正在尝试使用java和qt构建一个gui。
我在标签中放置了一个像素映射,它工作得很好,但是,现在我需要在单击标签内的像素地图时获得图像坐标。我不需要QWidget坐标。我只需要像素坐标来处理点击点上的图像。
我认为我应该重写mousePressEvent事件,但是我不知道如何将它附加到“像素点击”。
你能给我举个简单的例子吗?
我希望我已经用正确的方式解释了我的问题,我的英语不是很棒,对不起!
发布于 2014-01-11 17:45:30
我认为我应该重写mousePressEvent事件,但是我不知道如何将它附加到“像素点击”。
你似乎把事件和信号混淆在一起。前者是一个QEvent,后者是一个信号。你需要的是前者,而你不需要后者。
在编写QLabel时,您需要对C++类进行子类化,并编写类似的代码(不是在C++中使用QLabel,但无论哪种方式都可以将其视为伪代码)。
#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
...
}
};因此,根据您的用例,您需要查看这些方法的文档:
事件)[虚拟保护] 该事件处理程序(用于事件)可以在子类中重新实现,以接收小部件的鼠标按下事件。 如果您在mousePressEvent()中创建新的小部件,那么mouseReleaseEvent()可能不会在您期望的地方结束,这取决于基础窗口系统(或X11窗口管理器)、小部件的位置以及更多。 当单击窗口外时,默认实现实现了弹出窗口小部件的关闭。对于其他小部件类型,它什么也不做。
然后,这是获取与Qt 4同样工作的本地位置的方法。如果您需要使用浮点等更高的精度,可以考虑localPos()或Qt5中引入的其他方法。
QPoint QMouseEvent::pos() const 返回鼠标光标相对于接收事件的小部件的位置。 如果由于鼠标事件而移动小部件,请使用globalPos()返回的全局位置来避免抖动。
https://stackoverflow.com/questions/21065528
复制相似问题