Qt事件过滤器

news2024/9/28 1:21:54

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委托给widget
    ui->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_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    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.coloradmin.cn/o/853567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++精华铺】4.C++类和对象(上)面向对象、类、this指针

目录 1. 面向过程和面向对象 2. 类的引入 3. 类的定义 4. 类的访问限定符和封装 4.1 类的访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7. 类对象模型 7.1 类对象的存储方式 7.2 类的大小 7.2.1 空类的大小 7.2.2 结构体内存对齐规则 8. this关键字深入讲解 8.1…

如何选择适合自己的考试培训系统

随着考试的逐渐增多和竞争的加剧&#xff0c;许多人开始关注考试培训系统&#xff0c;以提高他们的考试成绩。然而&#xff0c;选择适合自己的考试培训系统并不容易&#xff0c;因为市场上有许多不同的培训系统可供选择。 1. 确定目标 在选择培训系统之前&#xff0c;首先要明…

Java并发编程(一)多线程基础概念

概述 多线程技术&#xff1a;基于软件或者硬件实现多个线程并发执行的技术 线程可以理解为轻量级进程&#xff0c;切换开销远远小于进程 在多核CPU的计算机下&#xff0c;使用多线程可以更好的利用计算机资源从而提高计算机利用率和效率来应对现如今的高并发网络环境 并发编程…

无涯教程-Perl - getpriority函数

描述 此函数返回进程(PRIO_PROCESS),进程组(PRIO_PGRP)或用户(PRIO_USER)的当前优先级。 参数WHICH指定要为PRIO_PROCESS,PRIO_PGRP或PRIO_USER之一设置优先级的实体,WHO是要设置的进程ID或用户ID。 WHO的值为0定义了当前流程,流程组或用户。这会在不支持系统getpriority()函…

C++STL简介:提升编程效率与可维护性的利器

目录 引言 一、STL基本概念 二、具体介绍 2.1 容器 2.2 算法 2.2.1 排序&#xff08;Sort&#xff09; 2.2.2 查找&#xff08;Find&#xff09; 2.3.2 复制&#xff08;Copy&#xff09; 2.3 迭代器 三、分析STL 优势&#xff1a; 缺点&#xff1a; 如何学习&#…

《合成孔径雷达成像算法与实现》Figure3.7

代码复现如下&#xff1a; clc clear all close all%参数设置 TBP 100; %时间带宽积 T 10e-6; %脉冲持续时间%参数计算 B TBP/T; …

做BI领域的ChatGPT,思迈特升级一站式ABI平台

8月8日&#xff0c;以「指标驱动 智能决策」为主题&#xff0c;2023 Smartbi V11系列新品发布会在广州丽思卡尔顿酒店开幕。 ​ 后疫情时代&#xff0c;BI发展趋势的观察与应对 在发布会上&#xff0c;思迈特CEO吴华夫在开场致辞中表示&#xff0c;当前大环境背景下&#xf…

行业追踪,2023-08-09

自动复盘 2023-08-09 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

讯飞星火大模型无需代码连接飞书即时消息的方法

1 使用场景 用户联络需求的升级&#xff0c;使智能客服与智能营销迎来飞速增长&#xff0c;客户服务也成为企业经营中非常重要的一环&#xff0c;如何提高客户服务质量和响应速度&#xff0c;一直是企业需要解决的难题。人工智能产品&#xff0c;也正在成为越来越多企业提升业务…

flutter3.0项目集成高得地图

文章目录 1.创建应用:注册高得开发平台 安卓端的设置flutter的集成ios端的设置 先看一下代码运行结果 安卓端真机 ios端真机屏幕录屏 本篇文章demo下载地址 下载后请用xcode修改自己的ios证书真机运行.flutter代码在PG1.dart里面修改 String androidKey “b3392bb7fe532b0eb…

Mac终端利器:Homebrew + iTerm2 + Oh My Zsh 教程

引言 前段时间调整了一下 iTerm2 的环境&#xff0c;感觉比以前好看多了&#xff0c;并且更加高效&#xff0c;这里做一个记录&#xff0c;希望能给大家一些启发。 工具介绍 brew&#xff1a;Mac OS 下强大的包管理工具。iTerm2&#xff1a;iTerm2是 Mac OS 终端的替代品&am…

实现vuex数据持久化处理

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 前言&#xff1a; 方案一 localStorage 介绍 值 示例 JSON.stringify() 介绍 语法 参数 返…

深入JVM - JIT分层编译技术与日志详解

深入JVM - JIT分层编译技术与日志详解 文章目录 深入JVM - JIT分层编译技术与日志详解1. 背景简介2. JIT 编译器2.1. 客户端版本的编译器: C12.2. 服务端版本的编译器: C22.3. Graal JIT 编译器 3. 分层编译技术(Tiered Compilation)3.1. 汇聚两种编译器的优点3.2. 精准优化(Ac…

人工智能、BIM技术、机器学习在智慧工地的应用

人工智能、BIM技术、机器学习在智慧工地的应用 智慧工地云平台是专为建筑施工领域所打造的一体化信息管理平台。通过大数据、云计算、人工智能、BIM、物联网和移动互联网等高科技技术手段&#xff0c;将施工区域各系统数据汇总&#xff0c;建立可视化数字工地。同时&#xff0…

⌈算法进阶⌋图论::并查集——快速理解到熟练运用

目录 一、原理 1. 初始化Init 2. 查询 find 3. 合并 union 二、代码模板 三、练习 1、 990.等式方程的可满足性 &#xff08;中等&#xff09; 2、 1061. 按字典序排列最小的等效字符串 &#xff08;中等&#xff09; 3、账户合并 &#xff08;较难&am…

QFontDialog

QFontDialog QFont字体类使用QFont类QFontDialog类的静态API简单的使用 QFontDialog类是QDialog的子类, 通过这个类我们可以得到一个进行字体属性设置的对话框窗口, 和前边介绍的对话框类一样, 我们只需要调用这个类的静态成员函数就可以得到想要的窗口了。 QFont字体类 关于…

Android自定义侧滑Item

源码地址&#xff1a;https://github.com/LanSeLianMa/CustomizeView/tree/master/cehuaitem 使用方式一&#xff1a;XML布局中直接使用 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com…

python怎么判断变量的数据类型

在编程的世界里&#xff0c;了解各种数据类型是非常重要的。在Python中&#xff0c;有着丰富的数据类型用于存储和处理不同类型的数据。掌握这些数据类型的定义和作用&#xff0c;我们能够更好地在程序中管理和操作数据&#xff0c;提高代码的效率和可读性。 Python中常见的数据…

使用node搭建服务器,前端自己写接口,将vue或react打包后生成的dist目录在本地运行

使用node.jsexpress或者使用node.jspm2搭建服务器&#xff0c;将vue或react打包后生成的dist目录在本地运行 vue项目打包后生成的dist目录如果直接在本地打开index.html,在浏览器中会报错&#xff0c;无法运行起来。 通常我是放到后端搭建的服务上面去运行&#xff0c;当时前端…