【Qt】系统相关(事件)

一、概念

事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件。所有的Qt事件均继承于抽象类QEvent。事件是由系统或者Qt平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一-个相应的事件。-些事件 是在用户操作时发出,如键盘事件、鼠标事件等,另一些事件则是由系统本身自动发出,如定时器事件。

常见的事件有:QMouseEvent,QKeyEvent,QTimerEvent,QDropEvent,QInputEvent,QPaintEvent

常见的事件描述有

事件名称 描述
鼠标事件 鼠标左键,鼠标右键,鼠标滚轮,鼠标移动,鼠标按下和松开
键盘事件 按键类型,按键按下,按键松开
定时器事件 定时时间到达
进入离开事件 鼠标的进入和离开
滚轮事件 鼠标滚轮滚动
绘屏事件 重绘屏幕
显示隐藏事件 窗口的显示和隐藏
移动事件 窗口位置的变化
窗口事件 是否为当前窗口
大小改变事件 窗口大小改变
焦点事件 键盘焦点移动
拖拽事件 用鼠标进行拖拽

二、事件处理

事件处理一般常用的方法为:重写相关的Event函数。
在Qt中,几乎所有的Event函数都是虚函数,所以可以重新实现。
如:在实现鼠标的进入和离开事件时,直接重新实现enterEvent()和leaveEvent()即可。enterEvent() 和leaveEvent() 函数原型如
在这里插入图片描述
实例

重写enterEvent和leaveEvent

创建一个QWidget文件,自己实现一个Label类,继承QLabel,重写其中的entetEvent和leaveEvent方法
在这里插入图片描述

重写两个接口,在进入和Label的时候只是进行打印提示

在这里插入图片描述

在ui文件中拖入一个Label

在这里插入图片描述

鼠标右击这个Label,点击提升为,输入对应的类名,点击添加,点击提升

在这里插入图片描述

此时我们可以看到,这是的Label就是我们自己实现的对QLabel继承的类

在这里插入图片描述

实现效果

请添加图片描述

三、鼠标事件

1.鼠标点击事件

重写虚函数 mousePressEvent

void Label::mousePressEvent(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton)
    {
        qDebug()<<"鼠标左键按下";
    }else if(event->button()==Qt::RightButton)
    {
        qDebug()<<"鼠标右键按下";
    }else if(event->button()==Qt::MidButton)
    {
        qDebug()<<"鼠标中键按下";
    }
}

2.鼠标释放事件

重写虚函数mouseReleaseEvent

void Label::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton)
    {
        qDebug()<<"鼠标左键松开";
    }else if(event->button()==Qt::RightButton)
    {
        qDebug()<<"鼠标右键松开";
    }else if(event->button()==Qt::MidButton)
    {
        qDebug()<<"鼠标中键松开";
    }
}

1和2实现效果
请添加图片描述

3.鼠标移动事件

鼠标移动事件是通过虚函数: mouseMoveEvent() 来实现的。同时为了实时捕获鼠标位置信息,需要通过函数setMouseTracking()来追踪鼠标的位置

#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
#include<QMouseEvent>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置鼠标跟踪
    setMouseTracking(true);
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    qDebug()<<"["<<event->x()<<","<<event->y()<<"]";
}


Widget::~Widget()
{
    delete ui;
}

请添加图片描述

四、按键事件

实现单按键事件,重载虚函数 KeyPressEvent

在这里插入图片描述

组合键触发事件
Qt::KeyboardModifier中定义了在处理键盘事件时对应的修改键。在Qt中,键盘事件可以与修改键一起使用,以实现一些复杂的交互操作。KeyboardModifier 中修改键的具体描述如下:
在这里插入图片描述

在这里插入图片描述

相关推荐

  1. Qt事件系统

    2024-04-02 19:44:01       13 阅读
  2. <span style='color:red;'>Qt</span> <span style='color:red;'>事件</span>

    Qt 事件

    2024-04-02 19:44:01      19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 19:44:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 19:44:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 19:44:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 19:44:01       18 阅读

热门阅读

  1. ChatGPT助力:提升学术论文写作的智能利器

    2024-04-02 19:44:01       20 阅读
  2. Maximum Product(UVA 11059)

    2024-04-02 19:44:01       18 阅读
  3. rust并行计算库Rayon

    2024-04-02 19:44:01       18 阅读
  4. 小波包变换(WPT)和OMP实现压缩感知

    2024-04-02 19:44:01       13 阅读
  5. k8s是什么

    2024-04-02 19:44:01       15 阅读
  6. vue获取上个月今天

    2024-04-02 19:44:01       15 阅读