实现步骤:
- 重写
mouseMoveEvent
方法,在其中处理鼠标移动事件。 - 确保
MainWindow
捕捉到鼠标移动事件,这通常需要启用鼠标追踪(mouse tracking),因为默认情况下,鼠标移动事件只在按住鼠标按钮时触发。
示例代码:
#include <QApplication>
#include <QMainWindow>
#include <QMouseEvent>
#include <QStatusBar>
#include <QLabel>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
// 创建状态栏中的 QLabel
mousePositionLabel = new QLabel(this);
// 添加 QLabel 到状态栏
statusBar()->addPermanentWidget(mousePositionLabel);
// 启用鼠标追踪
setMouseTracking(true);
centralWidget()->setMouseTracking(true); // 确保中央部件也启用鼠标追踪
}
protected:
void mouseMoveEvent(QMouseEvent *event) override {
// 获取鼠标的全局坐标或窗口内相对坐标
QPoint mousePos = event->pos(); // 获取相对MainWindow的坐标
// 更新状态栏中的文字
mousePositionLabel->setText(QString("Mouse Position: (%1, %2)").arg(mousePos.x()).arg(mousePos.y()));
// 调用基类方法以确保其他事件处理正常工作
QMainWindow::mouseMoveEvent(event);
}
private:
QLabel *mousePositionLabel;
};
步骤解释:
-
重写
mouseMoveEvent
:- 在
MainWindow
中重写mouseMoveEvent
方法,以捕捉鼠标移动事件。在这个方法中,你可以使用event->pos()
获取鼠标在窗口中的位置。
- 在
-
启用鼠标追踪:
- 默认情况下,鼠标移动事件只有在按住鼠标按钮时才会触发。通过调用
setMouseTracking(true)
,你可以确保在不按住鼠标按钮的情况下,也能捕捉到鼠标移动事件。
- 默认情况下,鼠标移动事件只有在按住鼠标按钮时才会触发。通过调用
-
更新状态栏:
- 在状态栏中的
QLabel
中显示当前鼠标的位置。这是一个简单的方式来实时显示鼠标坐标信息。
- 在状态栏中的
总结:
通过重写 mouseMoveEvent
并启用鼠标追踪,可以在 MainWindow
中捕捉到每次鼠标移动事件,并进行处理。这对于需要实时响应鼠标位置的应用程序(例如绘图程序或需要鼠标交互的界面)非常有用。