当前位置: 首页 > news >正文

Qt事件过滤器

1 介绍

        事件过滤器是一种机制,当某个QObject没有所需要的事件功能时,可将其委托其它QObject,通过eventFilter成员函数来过滤实现功能。

2 主要构成

委托:

ui->QObject1->installEventFilter(QObject2);

eventFilter声明

virtual bool eventFilter(QObject *watched, QEvent *event) override;

        在Qt creator中,可以使用如下步骤简化实现:

        a)右键widget

 

        b)选择insert  Virtual。。。:

        c)选择eventFilter,并勾选如下,稍后将定义粘贴到对应的.cpp文件中即可

 3 示例代码:使用事件过滤器对label实现单双击事件响应

       widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QEvent>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//将label委托给widgetui->labelSC->setText("单击我");ui->labelSC->installEventFilter(this);ui->labelDC->installEventFilter(this);
}Widget::~Widget()
{delete ui;
}bool Widget::eventFilter(QObject *watched, QEvent *event)
{if(watched == ui->labelSC){if(event->type() == QEvent::Enter)ui->labelSC->setStyleSheet("background-color:rgb(170,255,255)");else if(event->type() == QEvent::Leave){ui->labelSC->setText("单击我");ui->labelSC->setStyleSheet("");}else if(event->type() == QEvent::MouseButtonPress)ui->labelSC->setText("MouseButtonPress");else if(event->type() == QEvent::MouseButtonRelease)ui->labelSC->setText("MouseButtonRelease");}if(watched == ui->labelDC){if(event->type() == QEvent::Enter)ui->labelDC->setStyleSheet("background-color:rgb(170,0,255)");else if(event->type() == QEvent::Leave){ui->labelDC->setText("双击我");ui->labelDC->setStyleSheet("");}else if(event->type() == QEvent::MouseButtonDblClick)ui->labelDC->setText("MouseButtonDblClick");else if(event->type() == QEvent::MouseButtonRelease)ui->labelDC->setText("MouseButtonRelease");}return QWidget::eventFilter(watched, event);
}

        widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;// QObject interface
public:virtual bool eventFilter(QObject *watched, QEvent *event) override;
};#endif // WIDGET_H

 

 

http://www.lryc.cn/news/117232.html

相关文章:

  • Java基础集合框架学习(上)
  • 北京多铁克FPGA笔试题目
  • 从初学者的角度来理解指针常量和常量指针
  • C# OpenCvSharp 去水印 图像修复
  • 考研算法第40天:众数 【模拟,简单题】
  • MySQL:内置函数、复合查询和内外连接
  • 【HTML】label 标签
  • python视频流截图(按帧数)
  • MongoDB SQL
  • node js连接mysql数据库
  • 通过Python模拟计算附近WIFI密码,没有我蹭不到的网
  • ubuntu20.04 远程桌面配置记录【亲测好用】
  • 解决selenium的“can‘t access dead object”错误
  • Docker Dockerfile 使用方法
  • (6)(6.3) 复合连接的故障处理
  • 报考红帽认证难不,红帽认证考试容易吗?
  • 如何优雅地用VS编写C#代码——快捷键的使用
  • 微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序)
  • 【性能测试】性能数据采集工具nmon安装使用及报告参数含义详解
  • 『PostgreSQL』在 PostgreSQL中创建只读权限和读写权限的账号
  • 基于Java+SpringBoot+Vue的网上书城管理系统设计与实现(源码+LW+部署文档等)
  • 安全渗透——AWK知识整理
  • 计算机视觉的应用9-视觉领域中的61个经典数据集【大集合】的应用与实战
  • Go中for循环的遮挡效应
  • UE4 Cesium 学习笔记
  • 【LeetCode】322.零钱兑换
  • 中电金信:国际结算系统的“王冠”,为什么十年都戴在“它”的头上
  • java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis em
  • fine-tuning(微调)的理解
  • 深入理解设计模式面经