• 事件过滤器


    事件过滤器 

    事件过滤器的作用:实现在一个部件中监控其他多个部件的事件。方便了对事件的操作,不需要一个一个对控件的某些事件实现,可以统一的在一个部件中实现。

    过滤器函数:

    moitoredObj->installEventFilter(Filterobj)       安装事件过滤器

    • moitoredObj   被监视对象
    • Filterobj    监视者

    bool eventFilter(QObject * obj,QEvent *event)  事件过滤器

    • Object* obj   子部件
    • QEvent *event  子部件的事件

    过滤器的返回值:

    • return   true     表示被处理
    • return   false    表示未处理,会分发到其他对象
    • return   QObject::eventFilter(obj, event)。  使用标准方式处理

    ui界面中添加三个控件 pushButton   textEdit     label

     

    在widget.h文件中添加事件过滤器:

     bool eventFilter(QObject* obj,QEvent *event);//事件过滤器

    在构造函数中安装事件过滤器:

    1. resize(800,800);
    2. ui->pushButton->move(0,0);
    3. ui->pushButton->resize(200,100);
    4. ui->textEdit->move(200,0);
    5. ui->textEdit->resize(200,100);
    6. ui->label->move(400,0);
    7. ui->label->resize(200,100);
    8. ui->label->setFrameShape(QFrame::Box);//添加边框
    9. ui->pushButton->installEventFilter(this);//安装事件过滤器给this管理
    10. ui->textEdit->installEventFilter(this); //安装事件过滤器给this管理
    11. ui->label->installEventFilter(this); //安装事件过滤器给this管理

    事件过滤器的实现:

    1. bool Widget::eventFilter(QObject* obj,QEvent *event)//事件过滤器
    2. {
    3. if(obj==ui->pushButton)//当控件为pushbutton时
    4. {
    5. if(event->type()==QEvent::MouseButtonPress)//如果为点击事件
    6. {
    7. qDebug()<<"点击了pushButton";
    8. return true;//事件被处理
    9. }
    10. else
    11. {
    12. return false;//其他事件不处理
    13. }
    14. }
    15. else if(obj==ui->textEdit)//当控件为textEdit时
    16. {
    17. if(event->type()==QEvent::Wheel)
    18. {
    19. //强制转换,用来接收事件
    20. QWheelEvent *weelevent=static_cast<QWheelEvent *>(event);
    21. if(weelevent->delta()>0) ui->textEdit->zoomIn();//滚轮向上滚
    22. else ui->textEdit->zoomOut();//滚轮向下滚
    23. return true;//事件被处理
    24. }
    25. else return false;//其他事件不处理
    26. }
    27. else if(obj==ui->label)
    28. {
    29. if(event->type()==QEvent::MouseButtonPress)
    30. {
    31. //强制转换,用来接收事件
    32. QMouseEvent* mouseevent=static_cast<QMouseEvent*>(event);
    33. if(mouseevent->button()==Qt::LeftButton)
    34. {
    35. qDebug()<<"左键按下";
    36. return true;
    37. }
    38. }
    39. else return false;
    40. }
    41. else
    42. {
    43. return QWidget::eventFilter(obj,event);//其他的默认处理
    44. }
    45. }

    运行效果为:

     

     

     1..点击pushButton(输出内容)

     2.对textEdit进行滑轮操作(光标变大)

    3.点击label(输出内容)

     

     

     

  • 相关阅读:
    LeetCode50天刷题计划(Day 5—— 最长回文子串 10.50-13:00)
    鸿蒙原生应用元服务开发-WebGL网页图形库开发着色器绘制彩色三角形
    [13]javascript的类型检测的方法
    珠海金山面试复盘
    论文解读(gCooL)《Graph Communal Contrastive Learning》
    用ScheduledExecutorService接口,Quartz框架等创建定时任务
    java中的集合框架基础-5
    新款FTP替代系统重磅登场!怎样摆脱传统FTP弊端?
    勒索病毒最新变种.faust勒索病毒来袭,如何恢复受感染的数据?
    OD_2024_C卷_200分_1、爱吃蟠桃的孙悟空【JAVA】【二分法】
  • 原文地址:https://blog.csdn.net/qq_45303986/article/details/127831920