QT Qwidget 事件处理机制

news/2024/11/24 1:59:15/

qlineEdit

Qt事件处理是指在Qt应用程序中处理各种事件的过程。事件是指在应用程序中发生的各种操作,例如按键、鼠标点击、窗口移动等。Qt提供了一个事件处理机制,使得开发者可以对这些事件进行处理,以实现应用程序的各种功能。

Qt中的事件处理涉及到以下几个方面:

  • 事件的类型:Qt中定义了许多事件类型,包括键盘事件、鼠标事件、定时器事件等。

    事件的对象:每个事件都会被发送给一个特定的对象,例如一个窗口或一个控件。

    事件的处理:Qt中提供了一些事件处理函数,例如keyPressEvent()、mousePressEvent()等,用于处理各种事件。

    事件过滤器:Qt中还提供了事件过滤器机制,允许开发者在事件到达对象之前截获并处理事件。

在Qt中,事件处理是通过重载事件处理函数来实现的。例如,如果要处理键盘事件,就需要重载QWidget或QMainWindow类中的keyPressEvent()函数。在这个函数中,可以对按键进行处理,例如判断按下的键是哪个键,以及执行相应的操作。
除了重载事件处理函数外,还可以使用事件过滤器来处理事件。事件过滤器是一个对象,可以在事件到达目标对象之前截获并处理事件。这种方式可以允许开发者对多个对象共享事件处理代码,从而提高代码的复用性。
总之,Qt事件处理是一个非常重要的概念,开发者需要掌握它才能编写出高质量的Qt应用程序

事件第一进入子部件 执行完毕后不会交给widget再进行执行

但是我们如果这样做

QLineEdit::keyPressEvent(event); //默认处理
event->ignore(); //忽略该事件

忽略本事件 使该事件交给父类执行 这样就可以执行widget的keyPressEvent
在这里插入图片描述

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "mylineedit.h"
#include <QDebug>
#include <QKeyEvent>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);lineEdit = new MylineEdit(this);lineEdit->move(100,100);}Widget::~Widget()
{delete ui;
}void Widget::keyPressEvent(QKeyEvent *event){qDebug()<<tr("this is Widget keyevent") ;
}

///mylineedit.cpp

#include "mylineedit.h"
#include <QKeyEvent>
#include <QDebug>MylineEdit::MylineEdit(QWidget *parent) : QLineEdit(parent)
{
}void MylineEdit::keyPressEvent(QKeyEvent *event){qDebug() << tr("this is mylineedit keyevent") ;QLineEdit::keyPressEvent(event); //默认处理event->ignore(); //忽略该事件
}

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

相关文章

面试官问我为什么Integer a = (128) != Integer b (128) 装箱拆箱及IntegerCache问题

前言 基本数据类型与包装类型&#xff1a; 什么是基本数据类型&#xff1f;什么是包装类型&#xff1f; 装箱拆箱 什么是装箱&#xff1f;什么是拆箱&#xff1f; 怎么进行装箱的&#xff1f; 为什么这样设计&#xff1f; 如何进行拆箱 有了基本数据类型为什么还要有包…

【计算机视觉 | 目标检测】DETR风格的目标检测框架解读

文章目录一、前言二、理解2.1 DETR的理解2.2 DETR的细致理解2.2.1 Backbone2.2.2 Transformer encoder2.2.3 Transformer decoder2.2.4 Prediction feed-forward networks (FFNs)2.2.5 Auxiliary decoding losses2.3 更具体的结构2.4 编码器的原理和作用2.5 解码器的原理和作用…

【前端】jQuery

jQuery 是 JavaScript 的一个库&#xff0c;可以简化 JavaScript 编程 点击下载 jQuery 语法 $(selector).action()jquery(selector).action() selector 为选择器&#xff0c;使用选择器选择 HTML 元素 action() 为操作&#xff0c;对选中的元素进行操作 选择器 CSS 选择…

大数据学完好就业么

Python的普及与数据挖掘、人工智能和数值计算等领域的蓬勃发展相关&#xff0c;但同时也与普遍编程需求的增加有关。 Python应用领域广泛&#xff0c;意味着选择Python的同学在学成之后可选择的就业领域有很多&#xff0c;加上Python本身的优势&#xff0c;致使现在越来越多的…

Java Script

一.初识js 1.与css html的关系 HTML 网页的结构(骨CSS:网页的表现(皮JavaScript :网页的行为2.运行过程 编写的代码是保存在文件上,也就是存储到硬盘(外存zhong)双击以后,html文件浏览器(引用程序)就会读取文件,将文件内容加载到内存中,(数据流向:硬盘->内存)浏览器会解析用…

奇异值分解(SVD)和图像压缩

在本文中&#xff0c;我将尝试解释 SVD 背后的数学及其几何意义&#xff0c;还有它在数据科学中的最常见的用法&#xff0c;图像压缩。 奇异值分解是一种常见的线性代数技术&#xff0c;可以将任意形状的矩阵分解成三个部分的乘积&#xff1a;U、S、V。原矩阵A可以表示为&#…

第09章_子查询

第09章_子查询 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在某公…

Node.js学习笔记——fs模块

fs全称为file system&#xff0c;称之为文件系统&#xff0c;是Node.js中的内置模块&#xff0c;可以对计算机中的磁盘进行操作。 本章节会介绍如下操作&#xff1a; 文件写入文件读取文件移动与重命名文件删除文件夹操作查看资源状态 一、文件写入 文件写入就是将数据保存…