Qt中的事件學習
阿新 • • 發佈:2021-10-13
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_NAMESPACEnamespace 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(); }