QT中的事件
事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。
事件是先传递给指定窗口部件的,确切地说应该是先传递给获得焦点的窗口部件。如果该部件忽略掉该事件,那么这个事件就会传递给这个部件的父部件。重新实现事件处理函数时,一般要调用父类的相应事件处理函数来事件默认操作。
代码
mylineedit.h
#ifndef MYLINEEDIT_H #define MYLINEEDIT_H #include <QLineEdit> class MyLineEdit : public QLineEdit { Q_OBJECT public: MyLineEdit(QWidget *parent = 0); protected: void keyPressEvent(QKeyEvent *event); }; #endif // MYLINEEDIT_H
mylineedit.cpp
#include "mylineedit.h" #include <QKeyEvent> #include <QDebug> MyLineEdit::MyLineEdit(QWidget *parent) : QLineEdit(parent) { } void MyLineEdit::keyPressEvent(QKeyEvent *event) // 键盘按下事件 { qDebug()<<QString::fromUtf8("MyLineEdit键盘按下事件"); QLineEdit::keyPressEvent(event); event->ignore(); // 忽略该事件 ignore()要在最后调用 // 不忽略该事件执行结果:打印"MyLineEdit键盘按下事件" 忽略该事件执行结果:打印"MyLineEdit键盘按下事件"、Widget键盘事件按下 }
widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class MyLineEdit; class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); protected: void keyPressEvent(QKeyEvent *event); private: Ui::Widget *ui; MyLineEdit *lineEdit; }; #endif // WIDGET_H
widget.cpp
#include "widget.h" #include "ui_widget.h" #include "mylineedit.h" #include <QKeyEvent> #include <QDebug> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { lineEdit = new MyLineEdit(this); lineEdit->move(100, 100); ui->setupUi(this); } Widget::~Widget() { delete ui; } void Widget::keyPressEvent(QKeyEvent *event) { qDebug()<<QString::fromUtf8("Widget键盘事件按下"); }
main.cpp
#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }