当前位置:网站首页 > AI与大数据 > 正文

qpainter(Qpainter drawtext 与其他重叠)



1、事件介绍

事件是应用程序内外部产生的事情以及动作的统称,常见的所有事件例如鼠标事件QMouseEvent,键盘事件QKeyEvent等等都是继承自QEvent

2、事件的处理

在Qt中几乎所有的Event函数都是虚函数,我们可以通过C++多态,重写Event函数

首先创建一个QWidget项目,在项目处右键AddNew一个C++类文件,勾选Include QWidget以及Add Q_OBJECT,在帮助文档中找到要重写事件的定义,此时需要我们选择主题,我们选择QWidget Class,然后将函数名以及参数复制到代码中,然后重写函数,在ui中拖一个label进去,将label提升为我们自己新建一个Label类,与刚才我们AddNew的C++类文件名相同,点击添加后点击提升,在Label.h中包含上QLabel头文件,修改构造函数让Label继承自QLabel,修改一下参数为QWidget* parent

label.h
label.cpp

QEvent

3、QKeyEvent按键事件

(1)按下单个按键
(2)组合键

在帮助中搜索Qt::KeyboardModifier,其中定义了在处理键盘事件时对应的修改键

这其中的英文解释很简单就不翻译了,主要是第五条这里的Meta键,在Windows上指Windows键,在Mac上指Command键,第六条Numlock处于打开状态,第七条是输入法切换的

4、QMouseEvent鼠标事件

通过帮助文档找到QMouseEvent类

这里有关于鼠标的三个事件:鼠标的点击、鼠标的移动、鼠标滚轮操作,鼠标的点击又分为单击、双击以及按下之后释放的过程,鼠标点击的这三个方法使用方法相同,我们以鼠标单击举例

(1)鼠标单击事件
(2)鼠标移动事件

因为鼠标是一个随时移动的量,如果一直盯着鼠标那会是一个很大的开销,所以我们在默认状态下是是不追踪鼠标的,当我们通过设置setMouseTracking函数为true来实时捕获鼠标信息

当我们快速移动鼠标时,我们可以看到控制台打印出数据的速度明显下降,会出现卡顿,所以我们一般不使用这个函数

(3)鼠标滚轮操作

其中event->delta()返回滚动的距离

5、QTimeEvent定时器事件

(1)QTimerEvent

QTimerEvent类用来描述一个定时器事件,通过startTimer()函数来开启定时器

timerevent

(2)QTimer

QTimer类来实现一个定时器

timer

6、事件分发器

每个继承自QObject或者QObject类本身都可以在本类中重写bool event(QEvent* event)函数,来实现相关事件的捕获和拦截

在Qt中,我们发送的事件都是传给了QObject对象的event()函数,我们处理这个事件就是要重写这个event函数,它本身不会去处理事件,而是根据事件类型调用不同的事件处理函数

事件分发器就是用来分发事件,同时可以做拦截操作的,主要通过bool event(QEvent* event)函数实现,true为拦截

event_bool

当然我们自己在实现的时候会发现点击过快会发生"在mousePressEvent下点击鼠标"也出现在打印信息中,这是因为点击过快被系统认为是双击,此时第二次点击不会被event拦截,就打印出"在mousePressEvent下点击鼠标"

7、事件过滤器

事件过滤器是应用程序分发到event事件分发器之前做的一次更高级的拦截 因为使用事件分发器重写event函数实现拦截会很麻烦,因为event函数是protected的,所以需要继承已有类,每有一个组件需要实现拦截就要重写一个event函数

mylabel.h
mylabel.cpp
widget.h
widget.cpp

event_bool_super

今日分享就到这了~

到此这篇qpainter(Qpainter drawtext 与其他重叠)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • aiplaza(aiplaza在哪里)2025-05-31 19:18:10
  • faiies什么意思(faii是什么意思中文翻译)2025-05-31 19:18:10
  • aiplaza招商(ioi mall招商)2025-05-31 19:18:10
  • aiplus08耳机(airplus ai耳机)2025-05-31 19:18:10
  • aiplaza(aiplaza简介)2025-05-31 19:18:10
  • faiss数据库(faiss数据库不适用生产环境吗)2025-05-31 19:18:10
  • faiss数据库使用方法(fastapi 数据库操作)2025-05-31 19:18:10
  • aiplaza(aiplaza 开业)2025-05-31 19:18:10
  • Qpainter drawtext 与其他重叠(qpainter drawpolygon)2025-05-31 19:18:10
  • faiss数据库(faiss数据库使用方法)2025-05-31 19:18:10
  • 全屏图片