【Qt】事件

embedded/2024/12/22 19:44:43/

文章目录

  • 1 :peach:事件介绍:peach:
  • 2 :peach:事件的处理:peach:
  • 3 :peach:按键事件:peach:
    • 3.1 :apple:单个按键:apple:
    • 3.2 :apple:组合按键:apple:
  • 4 :peach:鼠标事件:peach:
    • 4.1 :apple:鼠标单击事件:apple:
    • 4.2 :apple:鼠标释放事件:apple:
    • 4.3 :apple:鼠标双击事件:apple:
    • 4.4 :apple:鼠标移动事件:apple:
    • 4.5 :apple:滚轮事件:apple:
  • 5 :peach:定时器:peach:
    • 5.1 :apple:QTimerEvent 类:apple:
    • 5.2 :apple:QTimer 类:apple:
    • 5.3 :apple:获取系统日期及时间:apple:


1 🍑事件介绍🍑

事件是应⽤程序内部或者外部产⽣的事情或者动作的统称。在 Qt 中使⽤⼀个对象来表⽰⼀个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本⾝在不同的时刻发出的。当⽤⼾按下⿏标、敲下键盘,或者是窗⼝需要重新绘制的时候,都会发出⼀个相应的事件。⼀些事件是在⽤⼾操作时发出,如键盘事件、⿏标事件等,另⼀些事件则是由系统本⾝⾃动发出,如定时器事件。常⻅的 Qt 事件如下:

在这里插入图片描述
常⻅事件描述:

事件名称描述
⿏标事件⿏标左键、⿏标右键、⿏标滚轮,⿏标的移动,⿏标按键的按下和松开
键盘事件按键类型、按键按下、按键松开
定时器事件定时时间到达
进⼊离开事件⿏标的进⼊和离开
滚轮事件⿏标滚轮滚动
绘屏事件重绘屏幕的某些部分
显⽰隐藏事件窗⼝的显⽰和隐藏
移动事件窗⼝位置的变化
窗⼝事件是否为当前窗⼝
⼤⼩改变事件窗⼝⼤⼩改变
焦点事件键盘焦点移动
拖拽事件⽤⿏标进⾏拖拽

2 🍑事件的处理🍑

事件处理⼀般常⽤的⽅法为:重写相关的 Event 函数。

在 Qt 中,⼏乎所有的 Event 函数都是虚函数,所以可以重新实现。如:在实现⿏标的进⼊和离开事件时,直接重新实现 enterEvent() 和 leaveEvent() 即可。enterEvent() 和 leaveEvent() 函数原型如下:

在这里插入图片描述

示例:创建一个项目,项目里面添加一个新的类,比如MyLabel,然后让该类继承自Label,重写对应的方法:
在这里插入图片描述
点击ui文件,增加一个Label,右键点击提升为,然后输入我们新增加的类名,点击增加以及提升。(我这里是已经提升过了的)
在这里插入图片描述
然后运行程序:
在这里插入图片描述
通过应用程序输出我们可以很直观感觉到鼠标进入Label以及退出Label时的改变。


3 🍑按键事件🍑

Qt 中的按键事件是通过 QKeyEvent 类来实现的。当键盘上的按键被按下或者被释放时,键盘事件便会触发。在帮助⽂档中查找 QKeyEvent 类如下:

在这里插入图片描述

3.1 🍎单个按键🍎

⽰例:当某个按键被按下时,输出:某个按键被按下了。

新建项⽬,在头⽂件 “widget.h” 中声明虚函数 keyPressEvent()

在这里插入图片描述
在 “widget.cpp” ⽂件中重写 keyPressEvent() 虚函数;
在这里插入图片描述
此时当我们点击按键a(A也可以,不区分大小写)时就会打印出我们想要的信息。

在这里插入图片描述

3.2 🍎组合按键🍎

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

Qt::NoModifier⽆修改键
Qt::ShiftModifierShift 键
Qt::ControlModifierCtrl 键
Qt::AltModifierAlt 键
Qt::MetaModifierMeta键(在Windows上指Windows键,在macOS上指Command键)
Qt::KeypadModifier使⽤键盘上的数字键盘进⾏输⼊时,Num Lock键处于打开状态
Qt::GroupSwitchModifier⽤于在输⼊法 组之间 切换

代码示例:
在这里插入图片描述


4 🍑鼠标事件🍑

在 Qt 中,⿏标事件是⽤ QMouseEvent 类来实现的。当在窗⼝中按下⿏标或者移动⿏标时,都会产⽣⿏标事件。利⽤ QMouseEvent 类可以获取⿏标的哪个键被按下了以及⿏标的当前位置等信息。在 Qt 帮助⽂档中查找QMouseEvent类 如下图⽰:

在这里插入图片描述

4.1 🍎鼠标单击事件🍎

在 Qt 中,⿏标按下是通过虚函数 mousePressEvent() 来捕获的。mousePressEvent() 函数原型如下:

[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event)

⿏标左右键及滚的表⽰如下:

Qt::LeftButton ⿏标左键
Qt::RightButton ⿏标右键
Qt::MidButton ⿏标滚轮

代码示例:
在这里插入图片描述
结果验证:
在这里插入图片描述
使用右键,滚轮也是一个道理,这里就不再演示了。

4.2 🍎鼠标释放事件🍎

⿏标释放事件是通过虚函数 mouseReleaseEvent() 来捕获的。mouseReleaseEvent() 函数原型如下:

[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event)

⽰例:
在这里插入图片描述
结果验证:
在这里插入图片描述

4.3 🍎鼠标双击事件🍎

⿏标双击事件是通过虚函数:mouseDoubleClickEvent() 来实现的。mouseDoubleClickEvent()函数原型如下:

[virtual protected] void QWidget::mouseDoubleClickEvent(QMouseEvent *event)

⽰例:⿏标左键双击

在这里插入图片描述
结果验证:
在这里插入图片描述

4.4 🍎鼠标移动事件🍎

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

mouseMoveEvent()函数原型如下:

[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event)

setMouseTracking()函数原型如下:

void setMouseTracking(bool enable)

说明:
setMouseTracking() 函数默认是 false,需要设置为 true,才能实时捕获⿏标位置信息。否则只有当⿏标按下时才能捕获其位置信息。

代码⽰例:
在这里插入图片描述
结果验证:
在这里插入图片描述

4.5 🍎滚轮事件🍎

在 Qt 中,⿏标滚轮事件是通过 QWheelEvent 类来实现的。滚轮滑动的距离可以通过 delta() 函数获取。delta() 函数原型如下:

int QGraphicsSceneWheelEvent::delta() const

其中返回值代表滚轮滑动的距离。正数表⽰滚轮相对于⽤⼾向前滑动,负数表⽰滚轮相对于⽤⼾向后滑动。

代码示例:
在这里插入图片描述
结果验证:
在这里插入图片描述


5 🍑定时器🍑

Qt 中在进⾏窗⼝程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使⽤定时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执⾏某⼀个任务。定时器在很多场景下都会使⽤到,如弹窗⾃动关闭之类的功能等。

Qt中的定时器分为 QTimerEventQTimer 这2个类。

  • QTimerEvent类⽤来描述⼀个定时器事件。在使⽤时需要通过 startTimer() 函数来开启⼀个定时器,这个函数需要输⼊⼀个以毫秒为单位的整数作为参数来表明设定的时间,它返回的整型值代表这个定时器。当定时器溢出时(即定时时间到达)就可以在 timerEvent() 函数中获取该定时器的编号来进⾏相关操作。
  • QTimer类来实现⼀个定时器,它提供了更⾼层次的编程接⼝,如:可以使⽤信号和槽,还可以设置只运⾏⼀次的定时器。

5.1 🍎QTimerEvent 类🍎

⽰例:在UI界⾯上放置两个 Label 控件,⼀个让其1秒数字累加⼀次,⼀个让其2秒数字累加⼀次。

首先现在界面上设置两个Label,在 “widget.h” 头⽂件中声明 timerEvent() 函数,并定义两个整型变量:
在这里插入图片描述

然后在 “widget.cpp” ⽂件中重写 timerEvent() 函数:
在这里插入图片描述
结果验证:
在这里插入图片描述

5.2 🍎QTimer 类🍎

⽰例:在UI界⾯放置⼀个 Label 标签,两个按钮,分别是 “开始” 和 “停⽌” ,当点击 “开始” 按钮时,开始每隔1秒计数⼀次,点击 “停⽌” 按钮时,暂停计数。

头文件:
在这里插入图片描述
源文件:
在这里插入图片描述
结果验证:
在这里插入图片描述

5.3 🍎获取系统日期及时间🍎

在 Qt 中,获取系统的⽇期及实时时间可以通过 QTimer 类 和 QDateTime类。QDateTime类 提供了字符串格式的时间。字符串形式的时间输出格式由 toString() ⽅法中的 format参数列表决定,可⽤的参数列表如下:
在这里插入图片描述

⽰例:获取系统⽇期及实时时间。

代码示例:
在这里插入图片描述
结果验证:
在这里插入图片描述



http://www.ppmy.cn/embedded/43198.html

相关文章

Java实现图书系统

首先实现一个图书管理系统,我们要知道有哪些元素? 1.用户分成为管理员和普通用户 2.书:书架 书 3.操作的是: 书架 目录 第一步:建包 第二步:搭建框架 首先:完成book中的方法 其次:完成BookList 然后:完成管理员界面和普通用户界面 最后:Main 第三步:细分方法 1.退…

博客说明 5/12~5/24【个人】

博客说明 5/12~5/24【个人】 前言版权博客说明 5/12~5/24【个人】对比最后 前言 2024-5-24 13:39:23 对我在2024年5月12日到5月24日发布的博客做一下简要的说明 以下内容源自《【个人】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作…

1. C++实现一个最简单的服务器和五种I/O模型

这只是一个简单的服务器, server.h 这个里面就是实现一个Server的类。然后一个run方法 /***Server class*author lipu123*date 2024-5-24*/#ifndef SERVER_H #define SERVER_H namespace avdance{class Server{ public:Server();~Server(); public:void run(); };}…

力扣239. 滑动窗口最大值

Problem: 239. 滑动窗口最大值 文章目录 题目描述思路复杂度Code 题目描述 思路 1.编写实现优先队列类: 1.1.实现push(int n):将元素n添加到队列尾,同时将n前面大于n的元素删除 1.2.实现int max():将队列头元素取出(由于实现了push所以此时队…

CLIP 论文的关键内容

CLIP 论文整体架构 该论文总共有 48 页,除去最后的补充材料十页去掉,正文也还有三十多页,其中大部分篇幅都留给了实验和响应的一些分析。 从头开始的话,第一页就是摘要,接下来一页多是引言,接下来的两页就…

【Rust日报】函数指针与闭包的区别

函数指针与闭包的区别 在 Rust 中,函数指针用于直接指向一个确定签名的函数,适用于不需要捕获外部环境的场景。相对闭包来说,函数指针语法简单,性能略高但不能保持状态。闭包则功能更强大,能够捕获和使用其定义时的环境…

Day01-python函数

目录 一、函数介绍 二、函数使用 2-1 语法格式 2-2 函数的基本定义和使用 2-3 函数参数 2-4 参数接收数据类型 2-5 函数的返回值 2-6 函数的文档 2-7 函数的嵌套调用 三、变量作用域 3-1 变量的引用 3-2 变量的分类 四、函数参数详解 五、函数的数据传递 5-1 将函…

C++ | Leetcode C++题解之第116题填充每个节点的下一个右侧节点指针

题目: 题解: class Solution { public:Node* connect(Node* root) {if (root nullptr) {return root;}// 从根节点开始Node* leftmost root;while (leftmost->left ! nullptr) {// 遍历这一层节点组织成的链表,为下一层的节点更新 next…