• qt5--鼠标操作


    #include "mylabel.h"
    #include <QDebug>
    #include <QPointF>
    #include <QPoint>
    
    MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
    {
    this->setMouseTracking(true);  //设置鼠标移动跟踪的模式
        //true    只要鼠标移动就触发mouseMoveEvent事件
        //false  只有按下鼠标并移动才触发mouseMoveEvent事件
     qDebug()<<this->hasMouseTracking();  //返回鼠标的跟踪状态
    
     this->setCursor(Qt::CrossCursor);  //设置鼠标在本控件中的形状
     //系统鼠标形状看下边
     this->unsetCursor();  //恢复默认鼠标形状
    
    }
    
    void MyLabel::enterEvent(QEvent *event){
        qDebug()<<"鼠标进来了";
    }
    void MyLabel::leaveEvent(QEvent *event){
        qDebug()<<"鼠标离开了";
    }
    void MyLabel::mousePressEvent(QMouseEvent *event){
        qDebug()<<"按下了鼠标";
        if (event->button()==Qt::LeftButton) {      //如果按下鼠标左键
            qDebug()<<"你按下了鼠标左键";
        }
    
        if (event->button()==Qt::RightButton) {      //如果按下鼠标右键
            qDebug()<<"你按下了鼠标右键";
        }
    
        if (event->button()==Qt::MidButton) {      //如果按下鼠标中键
            qDebug()<<"你按下了鼠标中键";
        }
    
    }
    void MyLabel::mouseReleaseEvent(QMouseEvent *ev){
        qDebug()<<"释放了鼠标";
    }
    void MyLabel::mouseMoveEvent(QMouseEvent *ev){
        int i,j;
        i=ev->x();  //返回x坐标---相对于控件客户区
        //需要#include <QMouseEvent>
        j=ev->y();    //返回y坐标---相对于控件客户区
        QString str=QString("x坐标为:%1  y坐标为:%2").arg(i).arg(j);
        qDebug()<<str;
    
        ulong ii;
        ii=ev->timestamp(); //# 返回事件发生的时间。【以程序运行开始计时,以毫秒为单位】
        qDebug()<<"事件发生时间:"<<i;
    
        if (ev->buttons()==Qt::NoButton) {      //如果没有按下鼠标
            qDebug()<<"你没有按下鼠标并移动";
            QPointF pointf;
            QPoint point,point1;
            point=ev->pos();  //返回鼠标坐标值--相对于控件--QPoint(17,0)
            qDebug()<<"鼠标pos值:"<<point;
            point1 =mapToGlobal(point);//将控件坐标转换成屏幕坐标
            qDebug()<<"相对于屏幕的坐标是:"<<point1;
    
    
            pointf=ev->windowPos();//返回鼠标坐标值--相对于窗口--QPointF(295,58)
    
            //point=pointf.toPoint();//将QPointF转换为QPoint
    
    
            qDebug()<<"鼠标windowPos值:"<<pointf;
    
            pointf=ev->screenPos();//返回鼠标坐标值--相对于屏幕--QPointF(196,271)
            qDebug()<<"鼠标screenPos值:"<<pointf;
            point=pointf.toPoint();
            point1=mapFromGlobal(point);//将屏幕坐标转换成控件坐标
    
            qDebug()<<"屏幕坐标是:"<<point<<"窗口坐标是:"<<point1;
    
    
            qDebug()<<"鼠标globalX值:"<<ev->globalX();//返回鼠标x坐标值--相对于屏幕
            qDebug()<<"鼠标globalY值:"<<ev->globalY();//返回鼠标y坐标值--相对于屏幕
    
            point=ev->globalPos();//返回鼠标坐标值--相对于屏幕--QPoint(732,292)
            qDebug()<<"鼠标globalPos值:"<<point;
    
            //pointf=QPointF(point);  //将QPoint转换为QPointF
    
    
            qDebug()<<"鼠标localPos值:"<<ev->localPos();//返回鼠标坐标值--相对于控件--QPointF(197,58)
    
    
            // mapToParent(QPoint) - 将控件坐标转换成父控件坐标。如果没有父控件,则相当于mapToGlobal (QPoint)
            //mapFromParent(QPoint) - 将父窗口坐标转换成窗口坐标。如果没有父窗口,则相当于mapFromGlobal(QPoint)
            //mapTo (QWidget, QPoint) - 将窗口坐标转换成 QWidget父窗口坐标
    
    
    
        }
        if (ev->buttons()==Qt::LeftButton) {      //如果按下鼠标左键
            qDebug()<<"你按下了鼠标左键并移动";
        }
        //注意:在mousePressEvent和mouseReleaseEvent是瞬间动作,用button()
        //在mouseMoveEvent是连续动作用buttons()
    
        if (ev->buttons()==Qt::RightButton) {      //如果按下鼠标右键
            qDebug()<<"你按下了鼠标右键并移动";
        }
    
        if (ev->buttons()==Qt::MidButton) {      //如果按下鼠标中键
            qDebug()<<"你按下了鼠标中键并移动";
        }
    
    
    }
    
    void MyLabel::wheelEvent(QWheelEvent *ev){
        qDebug()<<"滚轮滚动了"<<ev->angleDelta();
        //angleDelta():返回轮子旋转的距离,单位为度的八分之一.
        //正值表示轮子向前旋转远离用户;负值表示轮子向后旋转朝向用户--QPoint(0,120)
        //大多数鼠标类型以15度为步进工作,在这种情况下,delta值是120的倍数,即120*1/8=15度
        //然而,一些鼠标具有更精细的分辨率轮,并发送小于120个单位(小于15度)的delta值。为了支持这种可能性,您可以从事件中累积添加delta值,直到达到120的值,然后滚动小部件,或者您可以部分滚动小部件以响应每个轮子事件
        qDebug()<<ev->pixelDelta(); //返回屏幕上以像素为单位的滚动距离。此值是在支持基于高分辨率像素的delta值的平台(如macos)上提供的。该值应直接用于在屏幕上滚动内容
    
    }
    void MyLabel::mouseDoubleClickEvent(QMouseEvent *ev){
        qDebug()<<"双击了鼠标";
    }

    实例下载地址: https://share.weiyun.com/5zt9jZp   

     系统鼠标形状:


    Qt::ArrowCursor=0    

    Qt::UpArrowCursor=1     

    Qt::CrossCursor=2      

    Qt::WaitCursor=3     

    Qt::IBeamCursor=4     

     

      

  • 相关阅读:
    Linux学习总结(16)——CentOS 下 Nginx + Tomcat 配置负载均衡
    photo的复数是photos
    APUE1.11:系统调用 库函数
    Linux的man手册共有以下几个章节
    [关于宝宝的一些网上摘抄]
    ZT-Android深入浅出之Binder机 制
    jclass和jobject的迷惑
    ZT JAVA WeakReference
    ZT————pull push mode
    看了xici有写给孩子的信,maybe我也要写给孩子一些东西了
  • 原文地址:https://www.cnblogs.com/liming19680104/p/11521702.html
Copyright © 2020-2023  润新知