码迷,mamicode.com
首页 > 其他好文 > 详细

QT5 mouseMoveEvent事件

时间:2019-11-17 17:49:26      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:parent   sdn   lease   无法   保存   详细   his   构造函数   详细介绍   

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事件

标签:parent   sdn   lease   无法   保存   详细   his   构造函数   详细介绍   

原文地址:https://www.cnblogs.com/risesource/p/11877018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!