• QT事件鼠标事件、事件分发器


    鼠标进入事件 enterEvent

    鼠标离开事件 leaveEvent

    鼠标按下 mousePressEvent ( QMouseEvent ev)

    鼠标释放 mouseReleaseEvent

    鼠标移动 mouseMoveEvent

    ev->x() x坐标  ev->y() y坐标  ev->globalX 相对屏幕x  ev->globalY相对屏幕y

    ev->button() 可以判断所有按键 Qt::LeftButton Qt::RightButton

    ev->buttons()判断组合按键 判断move时候的左右键 结合 & 操作符

    格式化字符串 QString( “ %1 %2 ” ).arg( 111 ).arg(222)

    设置鼠标追踪 setMouseTracking(true); (直接进入移动事件,不再先进入左键点击;再进入移动)

    event()事件分发器

       mylabel.h

    #ifndef MYLABEL_H
    #define MYLABEL_H
    
    #include 
    
    class myLabel :  public QLabel
    {
        Q_OBJECT
    public :
        explicit myLabel(QWidget *parent = 0);
    
        //鼠标进入事件
        void enterEvent(QEvent *event);
    
        //鼠标离开事件
        void leaveEvent(QEvent *);
    
    
        //鼠标按下
        virtual void mousePressEvent(QMouseEvent *ev);
    
        //鼠标释放
        virtual void mouseReleaseEvent(QMouseEvent *ev);
    
        //鼠标移动
        virtual void mouseMoveEvent(QMouseEvent *ev);
    
        //通过event事件分发器 拦截 鼠标按下事件
        bool event(QEvent *e);
    
    
    signals:
    
    public slots:
    };
    
    #endif // MYLABEL_H

        mylabel.cpp

    #include "mylabel.h"
    #include 
    #include 
    myLabel::myLabel(QWidget *parent) : QLabel(parent)
    {
        //设置鼠标追踪状态
        //setMouseTracking(true);
    }
    
    
    //鼠标进入事件
    void myLabel::enterEvent(QEvent *event)
    {
       // qDebug() << "鼠标进入了";
    
    }
    
    //鼠标离开事件
    void myLabel::leaveEvent(QEvent *)
    {
       // qDebug() << "鼠标离开了";
    }
    
    //鼠标按下
    void myLabel::mousePressEvent(QMouseEvent *ev)
    {
    
        //当鼠标左键按下  提示信息
    //    if( ev->button() ==  Qt::LeftButton)
    //    {
            QString str = QString(  "鼠标按下了 x = %1   y = %2  globalX = %3 globalY = %4 " ).arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
            qDebug() << str;
    //    }
    }
    
    //鼠标释放
    void myLabel::mouseReleaseEvent(QMouseEvent *ev)
    {
    
    //    if( ev->button() ==  Qt::LeftButton)
    //    {
        QString str = QString(  "鼠标释放了 x = %1   y = %2  globalX = %3 globalY = %4 " ).arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
    
        qDebug() << str;
    //    }
    
    }
    
    //鼠标移动
    void myLabel::mouseMoveEvent(QMouseEvent *ev)
    {
        if ( ev->buttons() &   Qt::LeftButton )
        {
        QString str = QString(  "鼠标移动了 x = %1   y = %2  globalX = %3 globalY = %4 " ).arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
    
        qDebug() << str;
       }
    }
    
    
    bool myLabel::event(QEvent *e)
    {
        //如果是鼠标按下 ,在event事件分发中做拦截操作
        if (e->type() == QEvent::MouseButtonPress)
        {
            QMouseEvent * ev  =  static_cast (e);
            QString str = QString(  "Event函数中::鼠标按下了 x = %1   y = %2  globalX = %3 globalY = %4 " ).arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
            qDebug() << str;
    
    
            return true ;  //true代表用户自己处理这个事件,不向下分发
        }
    
    
        //其他事件 交给父类处理  默认处理
        return QLabel::event(e);
    }
  • 相关阅读:
    lintcode:Palindrome Partitioning 分割回文串
    lintcode:Add Binary 二进制求和
    lintcode :Count 1 in Binary 二进制中有多少个1
    lintcode : 二叉树的最小深度
    lintcode :二叉树的最大深度
    lintcode:Binary Tree Postorder Traversal 二叉树的后序遍历
    lintcode :Binary Tree Preorder Traversal 二叉树的前序遍历
    lintcode:二叉树的中序遍历
    lintcode:Binary Search 二分查找
    lintcode:1-10题
  • 原文地址:https://www.cnblogs.com/wuyuan2011woaini/p/16115225.html
Copyright © 2020-2023  润新知