使用前,先#include <QMouseEvent>
在MainWindow类中重写mouseMoveEvent函数,并自定义一个信号(这里是mouseMove)
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWidget>
#include <QMouseEvent>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
void mouseMoveEvent(QMouseEvent *event);//重写mouseMoveEvent函数
private slots:
void draw(QMouseEvent *event);//这是跟踪鼠标移动要触发的槽函数
signals:
void mouseMove(QMouseEvent *event);//自定义一个信号
};
重写mouseMoveEvent函数,内容为发送mouseMove信号即可
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(this,SIGNAL(mouseMove(QMouseEvent *)),this,SLOT(draw(QMouseEvent *)));
QMainWindow::setMouseTracking(true);
QMainWindow::centralWidget()->setMouseTracking(true);
ui->openGLWidget->setMouseTracking(true);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::draw(QMouseEvent *event){
pass
}
void MainWindow::mouseMoveEvent(QMouseEvent *event){
emit mouseMove(event);
}
需要注意的是,在MainWindow构造函数中对需要跟踪鼠标位置的组件,及其所属的各级父类和容器setMouseTracking(true),否则只有在按住左键或右键时才会捕捉鼠标位置。
网上很多setMouseTracking(true)了没起作用的,是因为只调用了一次,没有对父类和容器调用