【Qt】事件处理

news/2024/10/18 3:29:23/

文章目录

  • 事件
  • 鼠标事件
  • 键盘事件


事件

事件是应用程序内部或者外部产生的事情或者动作的统称。在 Qt 中使用⼀个对象来表示⼀个事件。所有的 Qt 事件均继承于抽象类 QEvent

事件是由系统或者 Qt 平台本⾝在不同的时刻发出的。⼀些事件是在用户操作时发出,如键盘事件、鼠标事件等,另⼀些事件则是由系统自动发出,如定时器事件。常见的 Qt 事件如下:

  • QMouseEvent 鼠标事件

  • QKeyEvent 键盘事件

Qt在上级控件中定义了一些事件处理函数,这是一些虚函数,如(例如 QObject::event()QWidget::mousePressEvent())。对象通过继承上级基类,并重写事件处理函数来处理事件。

事件与信号槽机制

信号槽实际上是Qt为了方便事件处理的实现,抽象出来的一种机制,也就是说事件是信号槽的底层实现,我们在开发中往往使用信号槽居多,事件机制适用于更底层,更贴近系统层面的事件处理。


鼠标事件

QWidget中关于鼠标的事件

Events说明
mousePressEvent(QMouseEvent *event)点按鼠标
mouseReleaseEvent(QMouseEvent *event)释放鼠标
mouseDoubleClickEvent(QMouseEvent *event)双击鼠标
mouseMoveEvent(QMouseEvent *event)移动鼠标
enterEvent(QEvent *event)鼠标进入控件
leaveEvent(QEvent *event)鼠标离开控件
wheelEvent(QWheelEvent *event)滑动鼠标滑轮

QMouseEvent类中一些常用接口

接口说明
QPoint pos()获取鼠标所在坐标 (当前控件内)
int x()横坐标
int y()纵坐标
Qt::MouseButton button()返回造成此次事件发生的鼠标按键 (Qt::MouseButton鼠标按键枚举类型)
QPoint globalPos()获取鼠标所在坐标 (全屏内)
class Label : public QLabel//自定义Label类,继承自QLabel,重写事件处理函数以自定义事件处理逻辑
{Q_OBJECT
public:Label(QWidget* parent);//重写事件处理函数void mousePressEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);void mouseDoubleClickEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void wheelEvent(QWheelEvent *event);
};
#include "label.h"
#include <QDebug>
#include <QMouseEvent>Label::Label(QWidget* parent) : QLabel(parent)
{}void Label::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton){qDebug() << "点击了左键";}else if(event->button() == Qt::RightButton){qDebug() << "点击了右键";}qDebug() << event->pos();
}void Label::mouseReleaseEvent(QMouseEvent *event)
{qDebug() << event->x() << " " << event->y();
}void Label::mouseDoubleClickEvent(QMouseEvent *event)
{(void)event;qDebug() << "双击鼠标";
}void Label::mouseMoveEvent(QMouseEvent *event)
{
/*    If mouse tracking is switched off, mouse move events only occur if a mouse button is pressed while the mouse is being moved.
*/qDebug() << "move: " << event->pos();
}

特别地,为了提高效率,mouseMoveEvent事件并不会鼠标一移动就触发,那样会发生非常多次!进行以下设置会打开鼠标追踪,不限制鼠标移动事件的触发。

this->setMouseTracking(true);

鼠标滑轮事件

void Label::wheelEvent(QWheelEvent *event)
{//使用鼠标滑轮,改变字体大小QFont font = this->font();int newPointSize = font.pointSize() + event->delta() / 10;if(newPointSize > 0){font.setPointSize(newPointSize);this->setFont(font);}
}

delta()函数返回滑轮滚动的距离。向前滚动返回正数,向后滚动返回负数。一个滚动单位的数值是120。


键盘事件

QWidget中关于键盘的事件

Events说明
keyPressEvent(QKeyEvent *event)点击键盘按键
keyReleaseEvent(QKeyEvent *event)释放键盘按键

注意,控件必须被聚焦时 (focus on),键盘事件才会发生。

  • 单个按键
void Widget::keyPressEvent(QKeyEvent *event)
{qDebug() << event->key();//获取键盘输入的按键是哪个,可以直接使用值,//也可以使用Qt中的内置按键枚举类型Keyif(event->key() == Qt::Key_A){qDebug() << "按下了A键";}else if(event->key() == Qt::Key_B){qDebug() << "按下了B键";}
}
  • 组合键

    Qt::KeyboardModifier 中定义了在处理键盘事件时对应的修改键。在 Qt 中,键盘事件可以与修改键⼀起使⽤,以实现⼀些复杂的交互操作。

image-20240717162435710


http://www.ppmy.cn/news/1476864.html

相关文章

农田一体化闸门:渠道自动化与精准测量

在农业现代化的浪潮中&#xff0c;农田灌溉系统的智能化升级已成为提升农业生产效率、节约水资源的关键。农田一体化闸门作为这一升级过程中的重要一环&#xff0c;以其全面自动化控制与精准测量的能力&#xff0c;为农田灌溉带来了变化。 农田一体化闸门系统集传感技术、自动化…

QT-RTSP相机监控视频流

QT-RTSP相机监控视频流 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "mainwindow.h"#include <QDebug>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), m_settings("outSmart", "LiveWatcher&…

Transformer之Attention的通俗理解

什么是 Attention&#xff1f; 在关于Token的文章 中介绍了什么是Token和Token的作用&#xff0c;那么将一堆Token之间的关系和语义进行提取的&#xff0c;就是Attention。其核心就是通过一些升维降维和求积操作&#xff0c;完成对感兴趣的区域进行特征提取。 A t t e n t i o…

前端实现将多个页面导出为pdf(分页)

一、需要用到两个插件&#xff0c;需要安装 vue框架中实现导出pdf npm install --save html2canvas // Dom转canvas再转image npm install jspdf --save // image转pdf二、实现方法 分别获取每个页面的DOM元素&#xff0c;并转为canvas再转image&#xff0c…

【AI资讯】7.19日凌晨OpenAI发布迷你AI模型GPT-4o mini

性价比最高的小模型 北京时间7月19日凌晨&#xff0c;美国OpenAI公司推出一款新的 AI 模型“GPT-4o mini”&#xff0c;即GPT-4o的更小参数量、简化版本。OpenAI表示&#xff0c;GPT-4o mini是目前功能最强大、性价比最高的小参数模型&#xff0c;性能逼近原版GPT-4&#xff0…

Python面试题:使用Python进行元编程:元类和元编程技巧

在 Python 中&#xff0c;元编程是一种编程技巧&#xff0c;它涉及到代码本身的结构和行为的编程。元编程允许你编写能够操作、修改或生成代码的代码。最常见的元编程技术包括使用元类、装饰器和类装饰器。以下是对 Python 元编程的详细讲解&#xff0c;包括元类和一些常用的元…

用python写一个爬虫,爬取google中关于蛇的照片

为了爬取Google中关于蛇的照片&#xff0c;我们可以利用Python中的第三方库进行网页解析和HTTP请求。请注意&#xff0c;这种爬取行为可能违反Google的使用条款&#xff0c;因此建议在合法和允许的情况下使用。以下是一个基本的Python爬虫示例&#xff0c;使用Requests库发送HT…

B树(B-Tree)详解

B树&#xff08;B-Tree&#xff09;详解 B树&#xff08;B-Tree&#xff09;是一种自平衡的树状数据结构&#xff0c;专为磁盘和其他直接访问的辅助存储设备而设计&#xff0c;广泛应用于数据库和文件系统中。B树通过减少磁盘I/O操作的次数&#xff0c;显著提高了数据存取的效…