zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    array.prototype.slice.call(arguments)
    axios 的坑
    Cannot read property 'range' of null
    IDEA导入Eclipse的JavaEE项目详细步骤链接
    使用 yarn 安装时,报错node_modules ode sass:Command failed.
    axios post请求非json传参设置
    vue-cli 3.x跨域配置
    idea错误: 找不到或无法加载主类
    Git 上传新项目
    Windows下生成SSH密钥
  • 原文地址:https://www.cnblogs.com/risesource/p/11877018.html
Copyright © 2011-2022 走看看