EV_REL 用Qt处理相对坐标写一个鼠标移动的例子
时间: 2024-10-14 17:18:34 浏览: 35
在Qt中,`EV_REL`是一个事件类型,它表示的是鼠标相对于屏幕位置的增量变化。当你需要处理鼠标在窗口内的相对移动而不是绝对点击坐标时,可以使用这个类型的事件。下面是一个简单的例子,展示如何在Qt中处理鼠标滚动事件,并使用相对坐标:
```cpp
#include <QApplication>
#include <QWidget>
#include <QEvent>
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget* parent = nullptr)
: QWidget(parent)
{
setMouseTracking(true); // 开启鼠标追踪,以便接收到鼠标事件
}
protected:
void mouseMoveEvent(QMouseEvent* event) override
{
if (event->type() == QEvent::MouseMove && event->button() != Qt::NoButton) { // 只处理鼠标左键的移动
int relX = event->x() - event->previousPos().x(); // 相对x轴的变化
int relY = event->y() - event->previousPos().y(); // 相对y轴的变化
// 这里你可以根据relX和relY调整窗口或其他UI元素的位置
// 例如,如果有一个大小固定的窗口,你想让它随鼠标移动而改变位置
move(event->globalPos() - QPoint(relX, relY));
event->accept(); // 接收并处理这个事件
}
}
signals:
// 如果你需要发送信号,比如当窗口移动到特定位置时
void widgetMoved();
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget window;
window.show();
return app.exec();
}
```
在这个例子中,`mouseMoveEvent`函数会在鼠标移动时被调用,获取鼠标当前位置与上一次位置之间的差值(即相对坐标),然后更新窗口的位置。
阅读全文