Qt:鼠标事件

虽然Qt是跨平台的c++开发框架,但是Qt的很多能力是系统提供的,只是其封装了系统的API,例如在Linux环境下的Qt就封装了Linux的一堆API

系统API

事件:图形化界面中,用户操作和程序之间交互的机制(封装了系统的事件)

文件操作

多线程编程

网络编程

多媒体:音视频的播放

事件

  • 信号和槽
    用户的各种操作产生信号,给信号指定槽函数,信号触发则能自动执行对应函数
  • 事件和信号槽十分相似
    用户的各种操作会产生事件,给事件关联处理函数或者处理逻辑,事件触发则自动执行对应代码
  • 事件本身是OS提供的机制,Qt进行了封装
    事件再次封装后得到了信号槽机制
  • 多数情况下用户和程序的交互可以通过信号槽完成
    如果用户的行为Qt并没有提供对应的信号,此时需要重写事件处理函数,来手动处理事件的响应逻辑

QEvent:该类表示事件的概念

QMouseEvent:鼠标引起

QKeyEvent:键盘引起

QTimerEvent:定时器引起

QDropEvent:拖拽引起

QInputEvent:输入引起

QPaintEvent:窗口绘制引起

重点学习一段代码和某个事件关联起来

事件的处理方式:让当前类重写事件处理函数

创建子类继承Qt已有的类,子类重写父类事件处理函数,事件触发就会通过多态,执行自己写的子类

处理鼠标进入和鼠标离开

enterEvent

leaveEvent

1.创建QLabel子类,重写enterEvent函数

2.在UI界面右键,选择提升为,将QLabel提升为自己写的类Label(将Qt中拖上去的控件类型转换成自定义的控件类型)

cpp 复制代码
Label.h
#include <QWidget>
#include <QLabel>
class Label : public QLabel
{
    Q_OBJECT
public:
    Label(QWidget* parent);

    void enterEvent(QEvent* event);//重写父类函数,函数名和参数类型要匹配
    void leaveEvent(QEvent* event);
};

#endif // LABLE_H
cpp 复制代码
Label.cpp
#include "label.h"
#include <QDebug>
Label::Label(QWidget* parent):QLabel(parent)
{

}
void Label::enterEvent(QEvent* event)
{
    qDebug()<<"enterEvent";
}
void Label::leaveEvent(QEvent* event)
{
    qDebug()<<"leaveEvent";
}
相关推荐
海盗12347 分钟前
DSH 接入 OpenCode Go 报 400 MissingSessionID:从 LLM 语义层退到 fetch 传输层的完整排障
开发语言·后端·golang
weixin1997010801613 分钟前
《Mercari OTA 直连接入:日本二手电商出海的API通道与600次/分钟限流实战》(附Python源码)
开发语言·数据库·python
库玛西17 分钟前
深度解构高并发利器:纯事件驱动 Reactor 模式的设计哲学与工程实践
服务器·开发语言·c++·笔记·tcp/ip
lemon_sjdk28 分钟前
JavaScript 常用关键字全解析
开发语言·javascript·ecmascript
linx29531 分钟前
单元五 · 对称认知·下:编译与链接
linux·c语言·开发语言·c++·嵌入式硬件
2501_930472441 小时前
从物理机到 CVM 全流程落地:部署脚本的 8 个云化改造点(附代码对比)
开发语言·人工智能·架构·腾讯云·perl
脉动数据行情11 小时前
Java SpringBoot 国际期货批量采集实践 美原油 / 黄金 / 指数期货定时落库
java·开发语言·spring boot
C++ 老炮儿的技术栈1 小时前
西门子 S7 常用存储区(I/Q/M/T/C/DB/PI/PQ)
linux·开发语言·c++·windows·qt·io
码行山野赴时序归途1 小时前
顺序表(Sequential List)详解:从数组到 C 语言实现
c语言·开发语言·数据结构·算法
扬大平仔1 小时前
# 小深:用 AgentScope Java 2.0 Harness 做私人助手(上)mysql
java·开发语言·mysql