QT Qwidget 事件处理机制

qlineEdit

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

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

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

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

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

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

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

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

但是我们如果这样做

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

忽略本事件 使该事件交给父类执行 这样就可以执行widget的keyPressEvent
QT Qwidget 事件处理机制_第1张图片

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "mylineedit.h"
#include 
#include 

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 
#include 

MylineEdit::MylineEdit(QWidget *parent) : QLineEdit(parent)
{
}

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

你可能感兴趣的:(QT,qt,开发语言)