首页 > 其他分享 >【Qt】系统相关(事件)

【Qt】系统相关(事件)

时间:2024-04-05 14:04:01浏览次数:25  
标签:鼠标 button 系统 Label 事件 qDebug 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 中修改键的具体描述如下:
在这里插入图片描述

在这里插入图片描述

标签:鼠标,button,系统,Label,事件,qDebug,Qt
From: https://blog.csdn.net/Tianzhenchuan/article/details/137224434

相关文章

  • 数据库系统,SQL语句
    上课讲得太烂还得自己看自己总结前置简单知识sql中的变量类型char(n)varchar(n)intsmallintnumeric(p,d)小数点前p位后d位real,doubleprecision浮点数float(n)精度至少n位浮点数varchar和char比较可能有问题创建表(定义关系)createtabledepartment (dep......
  • 基于微信小程序的外卖管理系统的设计与实现(论文+源码)_kaic
    摘 要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用外卖小程序可以有效管理,使信......
  • 企业员工岗前培训管理系统的设计与实现(论文+源码)_kaic
    摘 要有效的处理想要的相关信息和如何传播有效的信息,一直是人类不断探索的动力。人类文明火种的传承都是通过了多种媒介作为载体,也是随着社会生产力的发展不断的更新。随着互联网的到来,信息传播与管理都上升了一个新的台阶,并且方便应用的同时也要考虑信息传播的安全性,所以编......
  • [附源码]JAVA计算机毕业设计二手母婴商品交易系统(源码+开题)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景近年来,随着人们生活水平的提高和育儿观念的转变,母婴商品市场逐渐繁荣起来。然而,传统的母婴商品交易方式往往存在信息不对称、价格不透明等问题,给消费......
  • Node.js毕业设计基于WEB的学生成绩查询系统(Express+附源码)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着信息技术的飞速发展,互联网已经深入到我们生活的每一个角落。教育领域也不例外,越来越多的学校开始利用网络技术进行教学管理。其中,学生成绩查询系统是一......
  • Node.js毕业设计基于Web的选课系统(Express+附源码)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在当今信息化社会,教育行业也在不断地进行数字化改革。其中,选课系统作为学校教学管理的重要组成部分,其效率和准确性直接影响到学生的学习体验和教学质量。传......
  • 操作系统综合题之“采用实时调度,可调度的限制条件和可调度的最大X值是是多少ms的CPU时
    一、问题:单处理器情况下,m个周期性实时进程,若进程i处理时间为Ci,周期时间为Pi<(1≤i ≤m)1.要使系统可调度的限制条件什么?2.设置一个实时系统使用了4个周期事件,其周期分别为50ms,100ms,200ms,200ms。假设这4个周期时间分别需要25ms,20ms,10ms和xms的CPU时间。保持系统可调度的最......
  • 单片机寻址方式与指令系统
    通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习8051单片机的指令部份。一、概述1、指令的格式  我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机......
  • 操作系统综合题之“采用实时调度,6个实时进程是否能保证都在截止时间完成吗?”
    一、问题:为了实现实时调度,系统需要为调度程序提供那些信息?(至少写出4个)在单处理机情况下,如果有6个实时进程,周期时间都是30ms,系统为每个进程分配6ms的处理时间,请问系统能否保证每个实时进程都能在截止时间内完成吗?为什么? 二、参考答案答:1.系统需要提供的信息:就绪时间,开始截止时......
  • java计算机毕业设计(附源码)影视创作论坛系统(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着科技的不断进步和互联网的普及,影视创作行业也在经历着前所未有的变革。传统的影视创作模式已经无法满足现代社会的需求,而新兴的影视创作论坛系统则应......