zoukankan      html  css  js  c++  java
  • QT 11 鼠标键盘事件添加

    鼠标事件

        void mousePressEvent(QMouseEvent *event);        //单击
        void mouseReleaseEvent(QMouseEvent *event);      //释放
        void mouseDoubleClickEvent(QMouseEvent *event);  //双击
        void mouseMoveEvent(QMouseEvent *event);         //移动
        void wheelEvent(QWheelEvent *event);             //滑轮
    

      

    鼠标事件使用的时候,加头文件

    #include <QMouseEvent>
    
    
      ···
    // 鼠标按下事件
    void Widget::mousePressEvent(QMouseEvent *event)
    {
        // 如果是鼠标左键按下   改变指针形状,并且存储当前指针位置与窗口位置的差值。
        if(event->button() == Qt::LeftButton){
    
            ···
        }
    
        // 如果是鼠标右键按下
        else if(event->button() == Qt::RightButton){
    
           ···
        }
    }
    
    // 鼠标移动事件       默认情况下,触发事件需要点击一下,才能触发。可设置为自动触发:setMouseTracking(true); 
    void Widget::mouseMoveEvent(QMouseEvent *event)
    {
        // 这里必须使用buttons()
        if(event->buttons() & Qt::LeftButton){  //进行的按位与
    
           ···
        }
    }
    
    // 鼠标释放事件
    void Widget::mouseReleaseEvent(QMouseEvent *event)
    {
       ···
    }
    
    // 鼠标双击事件
    void Widget::mouseDoubleClickEvent(QMouseEvent *event)
    {
        // 如果是鼠标左键按下
        if(event->button() == Qt::LeftButton){
    
          
            ···
    
        }
    }
    
    // 滚轮事件
    void Widget::wheelEvent(QWheelEvent *event)
    {
        // 当滚轮远离使用者时
        if(event->delta() > 0){
            ···
        }else{//当滚轮向使用者方向旋转时
            ···
        }
    }
    

      

    键盘事件

        void keyPressEvent(QKeyEvent *event);
        void keyReleaseEvent(QKeyEvent *event);
    

      

    键盘事件使用时,加头文件

    #include <QKeyEvent>
    // 键盘按下事件
    void Widget::keyPressEvent(QKeyEvent *event)
    {
        // 是否按下Ctrl键      特殊按键
        if(event->modifiers() == Qt::ControlModifier){
    
            // 是否按下M键    普通按键  类似
            if(event->key() == Qt::Key_M)
                ···
        }
        else QWidget::keyPressEvent(event);   //保存默认事件
    
        //如果是处理两个普通按键,得避免自动重复,释放中也要处理
        if(event->key() == Qt::Key_Up){
    
            // 按键重复时不做处理
            if(event->isAutoRepeat()) return;
    
            // 标记向上方向键已经按下
            keyUp = true;
    
        }else if(event->key() == Qt::Key_Left){
            if(event->isAutoRepeat()) return;
            keyLeft = true;
        }
    }
    
    
    
    // 按键释放事件
    void Widget::keyReleaseEvent(QKeyEvent *event)
    {
        ···
    	
        //如果是处理两个普通按键,得避免自动重复
       if(event->key() == Qt::Key_Up){
            if(event->isAutoRepeat()) return;
    
     
     	···       
    
           
        }
        else if(event->key() == Qt::Key_Left){
            if(event->isAutoRepeat()) return;
    
           ···
          
       }
    }
    

      

  • 相关阅读:
    yarn/npm 设置镜像地址
    vmware 安装的虚拟机没有网络
    idea + spring-boot 开发时热更新(hotreload)
    @ConfigurationProperties(prefix = "server-options") 抛出 SpringBoot Configuration Annotation Processor not configured 错误
    使用 @ConfigurationProperties 注解 提示 "Spring Boot Configuration Annotation Processor not found in classpath"
    idea 中 spring-boot 项目使用 lombok 编译报错找不到 log
    install docker
    Install Ubuntu on Windows Subsystem for Linux
    解决 js aysnc await try-catch 地狱
    spring-boot rest controller 使用枚举作为参数,重写反序列化实现任意值转枚举类型
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/7507461.html
Copyright © 2011-2022 走看看