QT5 mouseMoveEvent事件

Posted risesource

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT5 mouseMoveEvent事件相关的知识,希望对你有一定的参考价值。

QT5鼠标移动事件的使用

  • 1.开启跟踪鼠标,在构造函数中使用如下函数
this->setMouseTracking(true);
  • 2.复写“鼠标移动事件”函数
//mainwindow.h
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    //鼠标移动事件
    void mouseMoveEvent(QMouseEvent *event);

private:
    Ui::MainWindow *ui;
    QLabel *labelPos;
};
//mainwindow.cpp
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    labelPos->setText(QString("%1:   (%2, %3)").arg("current pos").arg(event->pos().x()).arg(event->pos().y()));
}
  • 3.问题
    这样设置后,在mainWindow窗口,无法扑捉没有鼠标按键按下的移动,只扑捉到有按键按下的移动事件。

  • 4.解决

    bool mouseTracking
    这个属性保存的是窗口部件跟踪鼠标是否生效。
    如果鼠标跟踪失效(默认),当鼠标被移动的时候只有在至少一个鼠标按键被按下时,这个窗口部件才会接收鼠标移动事件。
    如果鼠标跟踪生效,如果没有按键被按下,这个窗口部件也会接收鼠标移动事件。
    QWidget中使用是没有问题的,但是,对于QMainWindow即使使用了setMouseTracking(true)依然无法捕捉到鼠标没有按下的移动,只有在鼠标按下是才能捕捉。
    解决办法:要先把QMainWindow的CentrolWidget使用setMouseTracking(true)开启移动监视。然后在把QMainWindow的setMouseTracking(true)开启监视。

在构造函数加入如下语句

ui->centralWidget->setMouseTracking(true);

详细介绍:https://blog.csdn.net/yu132563/article/details/53028226

以上是关于QT5 mouseMoveEvent事件的主要内容,如果未能解决你的问题,请参考以下文章

QGraphicsView 中的 MouseMoveEvent

即使拦截鼠标事件,Qt 窗口也会移动

qt QListWidget 添加鼠标移动事件(mouseMoveEvent),让父窗体可以监听到鼠标移动

工具提示停止 mouseMoveEvent

如何在 QPainter 上实现 mouseMoveEvent?

QT的ouseMoveEvent