• QT事件系统_lineEdit输入信息触发事件方法


    应用程序输出:

    "MyLineEdit类的keypress事件已触发,键盘按下"

    "2022-09-09 22:04:33.810" "主窗口的键盘事件触发,键盘按下"

    "主窗口的事件过滤器触发"

    "mylineEdit的event函数已经触发"

    "MyLineEdit类的keypress事件已触发,键盘按下"

    "2022-09-09 22:05:29.685" "主窗口的键盘事件触发,键盘按下"

    "主窗口的事件过滤器触发"

    "mylineEdit的event函数已经触发"

    "MyLineEdit类的keypress事件已触发,键盘按下"

    "2022-09-09 22:05:33.897" "主窗口的键盘事件触发,键盘按下"

    "主窗口的事件过滤器触发"

    "mylineEdit的event函数已经触发"

    "MyLineEdit类的keypress事件已触发,键盘按下"

    "2022-09-09 22:05:34.483" "主窗口的键盘事件触发,键盘按下"

    "主窗口的事件过滤器触发"

    "mylineEdit的event函数已经触发"

    "MyLineEdit类的keypress事件已触发,键盘按下"

    "2022-09-09 22:05:35.553" "主窗口的键盘事件触发,键盘按下"

    新建一个mylineedit类

    1. #ifndef MYLINEEDIT_H
    2. #define MYLINEEDIT_H
    3. #include
    4. class MyLineEdit : public QLineEdit
    5. {
    6. Q_OBJECT
    7. public:
    8. explicit MyLineEdit(QWidget *parent=0);
    9. bool event(QEvent *event);//src6_2
    10. protected:
    11. void keyPressEvent(QKeyEvent *event);
    12. };
    13. #endif // MYLINEEDIT_H
    1. #include "mylineedit.h"
    2. #include
    3. #include
    4. MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent)
    5. {
    6. }
    7. bool MyLineEdit::event(QEvent *event)//src6_2
    8. {
    9. if(event->type()==QEvent::KeyPress)
    10. {
    11. qDebug()<<tr("mylineEdit的event函数已经触发");
    12. }
    13. return QLineEdit::event(event);//执行QlineEdit类的event函数的默认操作
    14. }
    15. void MyLineEdit::keyPressEvent(QKeyEvent *event)
    16. {
    17. qDebug()<<tr("MyLineEdit类的keypress事件已触发,键盘按下");
    18. QLineEdit::keyPressEvent(event);//执行
    19. event->ignore();//输出后,才将继续执行主窗口的keypressEvent事件
    20. }

    主窗口事件:

    1. #ifndef MAINWINDOW_6_1_H
    2. #define MAINWINDOW_6_1_H
    3. #include
    4. class MyLineEdit;//类的前置声明
    5. QT_BEGIN_NAMESPACE
    6. namespace Ui { class MainWindow_6_1; }
    7. QT_END_NAMESPACE
    8. class MainWindow_6_1 : public QWidget
    9. {
    10. Q_OBJECT
    11. public:
    12. MainWindow_6_1(QWidget *parent = nullptr);
    13. ~MainWindow_6_1();
    14. bool eventFilter(QObject *obj,QEvent *event);
    15. private:
    16. Ui::MainWindow_6_1 *ui;
    17. MyLineEdit *line_edit;
    18. protected:
    19. void keyPressEvent(QKeyEvent *event);
    20. };
    21. #endif // MAINWINDOW_6_1_H
    1. #include "mainwindow_6_1.h"
    2. #include "ui_mainwindow_6_1.h"
    3. #include "mylineedit.h"
    4. #include
    5. #include
    6. #include
    7. MainWindow_6_1::MainWindow_6_1(QWidget *parent)
    8. : QWidget(parent)
    9. , ui(new Ui::MainWindow_6_1)
    10. {
    11. ui->setupUi(this);
    12. line_edit=new MyLineEdit(this);
    13. line_edit->move(100,100);
    14. line_edit->installEventFilter(this);//在主窗口的lineedit控件安装事件过滤器,src6_2
    15. }
    16. MainWindow_6_1::~MainWindow_6_1()
    17. {
    18. delete ui;
    19. }
    20. bool MainWindow_6_1::eventFilter(QObject *obj, QEvent *event)//src_6_2事件过滤器
    21. {
    22. if(obj==line_edit)
    23. {
    24. if(event->type()==QEvent::KeyPress)
    25. {
    26. qDebug()<<tr("主窗口的事件过滤器触发");
    27. }
    28. }
    29. return QWidget::eventFilter(obj,event);
    30. }
    31. void MainWindow_6_1::keyPressEvent(QKeyEvent *event)
    32. {
    33. qDebug()<currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")<<tr("主窗口的键盘事件触发,键盘按下");
    34. }

  • 相关阅读:
    python+windows画图工具--复现别人论文中的colormap 方法2
    【答读者问57】backtrader回测的时候出现nan值的时候如何解决
    jar包,引入依赖
    七天进阶elasticsearch[one]
    Vue vuex vue-router
    流量主如何在广告收益和用户体验中找到平衡
    异或和大小比较类问题——抓住最高位:CF1863F
    Java笔记三
    DataGrip 2023:让数据库开发变得更简单、更高效 mac/win版
    练习:完成试卷的页面设计
  • 原文地址:https://blog.csdn.net/txwtech/article/details/126789916