• Qt 事件总结(鼠标、键盘) QMouseEvent、QKeyEvent


    Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。在执行

    exec()函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,Qt 将创建一个事件对象。Qt 中所有事件类都继承于

    QEvent。在事件对象创建完毕后,Qt 将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是将这些事件对

    象按照它们不同的类型,分发给不同的事件处理器(event handler)。

    如上所述,event()函数主要用于事件的分发。所以,如果你希望在事件分发之前做一些操作,就可以重写这个event()函数了。

     

    鼠标事件

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

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

    #include <QMouseEvent>
     1 // 鼠标按下事件
     2 void Widget::mousePressEvent(QMouseEvent *event)
     3 {
     4     // 如果是鼠标左键按下   改变指针形状,并且存储当前指针位置与窗口位置的差值。
     5     if(event->button() == Qt::LeftButton){
     6         ···
     7     }
     8     // 如果是鼠标右键按下
     9     else if(event->button() == Qt::RightButton){
    10        ···
    11     }
    12 }
    13 // 鼠标移动事件       默认情况下,触发事件需要点击一下,才能触发。可设置为自动触发:setMouseTracking(true); 
    14 void Widget::mouseMoveEvent(QMouseEvent *event)
    15 {
    16     // 这里必须使用buttons()
    17     if(event->buttons() & Qt::LeftButton){  //进行的按位与
    18        ···
    19     }
    20 }
    21 // 鼠标释放事件
    22 void Widget::mouseReleaseEvent(QMouseEvent *event)
    23 {
    24    ···
    25 }
    26 // 鼠标双击事件
    27 void Widget::mouseDoubleClickEvent(QMouseEvent *event)
    28 {
    29     // 如果是鼠标左键按下
    30     if(event->button() == Qt::LeftButton){
    31       
    32         ···
    33     }
    34 }
    35 // 滚轮事件
    36 void Widget::wheelEvent(QWheelEvent *event)
    37 {
    38     // 当滚轮远离使用者时
    39     if(event->delta() > 0){
    40         ···
    41     }else{//当滚轮向使用者方向旋转时
    42         ···
    43     }
    44 }

    键盘事件

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

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

    
    
    #include <QKeyEvent>
     1 // 键盘按下事件
     2 void Widget::keyPressEvent(QKeyEvent *event)
     3 {
     4     // 是否按下Ctrl键      特殊按键
     5     if(event->modifiers() == Qt::ControlModifier){
     6         // 是否按下M键    普通按键  类似
     7         if(event->key() == Qt::Key_M)
     8             ···
     9     }
    10     else QWidget::keyPressEvent(event);   //保存默认事件
    11 
    12     //如果是处理两个普通按键,得避免自动重复,释放中也要处理
    13     if(event->key() == Qt::Key_Up){
    14         // 按键重复时不做处理
    15         if(event->isAutoRepeat()) return;
    16         // 标记向上方向键已经按下
    17         keyUp = true;
    18     }else if(event->key() == Qt::Key_Left){
    19         if(event->isAutoRepeat()) return;
    20         keyLeft = true;
    21     }
    22 
    23 }
    24 // 按键释放事件
    25 void Widget::keyReleaseEvent(QKeyEvent *event)
    26 {
    27     ···
    28     
    29     //如果是处理两个普通按键,得避免自动重复
    30    if(event->key() == Qt::Key_Up){
    31         if(event->isAutoRepeat()) return;
    32  
    33      ···       
    34        
    35     }
    36     else if(event->key() == Qt::Key_Left){
    37         if(event->isAutoRepeat()) return;
    38        ···
    39       
    40    }
    41 
    42 }
  • 相关阅读:
    plsql developer中各个window的作用【转】
    回忆java输入输出流,走出误区
    JDBC中的元数据
    对于Oracle、mysql和sql server中的部分不同理解
    我对数据库事务的理解(MYSQL中)
    关于mysql的备份和恢复
    mysql触发器学习
    mysql存储过程学习
    JavaScript位运算符
    【JavaScript】数组随机排序 之 Fisher–Yates 洗牌算法
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/12698864.html
Copyright © 2020-2023  润新知