Qt 使用QLabel的派生类实现QLabel的双击响应
1 介绍
在QLabel中没有双击等事件响应,需要构建其派生类,自定义信号(signals)、重载事件函数(event),最后在Qwidget中使用connect链接即可,进而实现响应功能。
对于其余没有需求事件响应的QObject同样适用。
此外,该功能同样可以使用事件过滤器,将QLable所需的双击事件功能委托给其它QObject如QWidget来处理。
2 过程
2.1 构建派生类
2.2 自定义信号,重载事件函数
信号doubleClicked、 与mouseDoubleClickEvent声明:
与mouseDoubleClickEvent定义:
注:信号doubleClicked在Qt中有内置定义,不需要重载。
2.3 QWidget中的connect链接
3 代码
tmylabel.h
#ifndef TMYLABEL_H
#define TMYLABEL_H#include <QLabel>
#include <QObject>
#include <QMainWindow>class TMyLabel : public QLabel
{Q_OBJECT
public:TMyLabel(QWidget *parent = nullptr);
signals:void doubleClicked();// QWidget interface
protected:virtual void mouseDoubleClickEvent(QMouseEvent *event) override;// QObject interface
public:virtual bool event(QEvent *event) override;
};#endif // TMYLABEL_H
tmylabel.cpp
#include "tmylabel.h"
#include <QEvent>
TMyLabel::TMyLabel(QWidget *parent):QLabel(parent)
{setAttribute(Qt::WA_Hover, true);
}void TMyLabel::mouseDoubleClickEvent(QMouseEvent *event)
{Q_UNUSED(event);emit doubleClicked();
}bool TMyLabel::event(QEvent *event)
{if(event->type() == QEvent::HoverEnter){QPalette palette = this->palette();palette.setColor(QPalette::WindowText, Qt::red);setPalette(palette);}else if(event->type() == QEvent::HoverLeave){QPalette palette = this->palette();palette.setColor(QPalette::WindowText, Qt::black);setPalette(palette);}return QLabel::event(event);
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->label, &TMyLabel::doubleClicked, this, &MainWindow::do_double_clicked);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::do_double_clicked()
{ui->label->setText("label被双击,自定义信号槽响应");
}void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
{Q_UNUSED(event);ui->label->setText("窗口被双击");ui->label->adjustSize();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
private slots:void do_double_clicked();private:Ui::MainWindow *ui;// QWidget interface
protected:virtual void mouseDoubleClickEvent(QMouseEvent *event) override;
};#endif // MAINWINDOW_H
相关文章:

Qt 使用QLabel的派生类实现QLabel的双击响应
1 介绍 在QLabel中没有双击等事件响应,需要构建其派生类,自定义信号(signals)、重载事件函数(event),最后在Qwidget中使用connect链接即可,进而实现响应功能。 对于其余没有需求事件响应的QObject同样适用。 此外,该功…...

关于@JSONField的使用
1.此注解来自jar包com.alibaba.fastjson 今天分享一个有意思的事情。这个注解作用与类的属性上,如下: ApiModelProperty(value"开始时间,格式:yyyy-MM-dd",required true) JSONField(name"start_date",ordinal 1) private String…...

Centos7单机部署ElasticSearch
Centos7单机部署ElasticSearch 引言 Elasticsearch是一种广泛使用的开源搜索引擎,专门为分布式环境设计,但也可以在单机上运行。它使存储、搜索和分析大量数据变得更加容易和高效。此教程将引导你通过在Centos7上单机部署Elasticsearch,涵盖…...

js玩儿爬虫
前言 提到爬虫可能大多都会想到python,其实爬虫的实现并不限制任何语言。 下面我们就使用js来实现,后端为express,前端为vue3。 实现功能 话不多说,先看结果: 这是项目链接:https://gitee.com/xi1213/w…...

新利好带动 POSE 持续上扬,月内几近翻倍
PoseiSwap 是 Nautilus Chain 上的首个 DEX,得益于 Nautilus Chain 的模块化 Layer3 构架,PoseiSwap 正在基于 zk-Rollup 方案构建全新的应用层,并基于此构建隐私、合规等全新的特性,为未来其布局 RWA 领域推动 Web2、Web3 世界的…...

Windows terminal 添加 git bash 解决git中文乱码显示问题
Windows terminal 添加 git bash 解决git中文乱码显示问题 在 windows terminal 中配置git 说明: 点击箭头选择设置 说明: 点击"添加新配置文件"配置名称命令行,可执行文件的具体语句 C:\Program Files\Git\bin\bash.exe启动目录…...

C语言实现选择排序
什么是选择排序? 选择排序是一种简单直观的排序算法,它的核心思想是每次从未排序的元素中选择最小(或最大)的元素,然后将其放到已排序序列的末尾。通过重复这个过程,直到所有元素都排好序为止。 选择排序…...

unable to write symref for HEAD: Permission denied
今天从gitee上面克隆项目到本地时报错如下 warning: unable to unlink ‘D:/IDEAcode/ruiji1.0/.git/HEAD.lock’: Invalid argument error: unable to write symref for HEAD: Permission denied 解决方法:将要存放项目的文件夹权限修改为完全控制 原先权限&…...

长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的实践技术应用
植被是陆地生态系统中最重要的组分之一,也是对气候变化最敏感的组分,其在全球变化过程中起着重要作用,能够指示自然环境中的大气、水、土壤等成分的变化,其年际和季节性变化可以作为地球气候变化的重要指标。此外,由于…...
【行为型设计模式】C#设计模式之策略模式
题目:假设你正在开发一个手机应用程序,该应用程序包含一个计算器功能。用户可以根据自己的需求选择不同的计算策略进行计算,例如加法、减法、乘法或除法。请使用策略模式设计该计算器功能,使得用户可以根据自己的选择进行相应的计…...

Linux Shell 编程入门
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天…...

Webstorm + Egg.js 进行断点调试
Webstorm Egg.js 进行断点调试 1、在工具栏找到编辑配置,创建已运行Node.js 应用程序的调试配置 2、debug调试配置 3、调试 4、查看断点是否起效...

Oracle-创建PDB
Oracle-创建PDB 创建PDB的方式 从PDB$SEED新建PDB克隆已存在的PDB 本地PDB克隆到同一个CDB中将远程PDB克隆到CDB中将非CDB插入或克隆到CDB中通过插拔的方式创建PDB sql 命令语法 条件 CDB必须open并且read write模式连接CDB$ROOT 用户并且具有CREATEPLUGGABLEDATABASE系统权…...

【TypeScript】交叉类型联合类型(四)
【TypeScript】交叉类型&联合类型(四) 【TypeScript】交叉类型&联合类型(四)一、简介二、交叉类型2.1 交叉类型使用的注意点2.2 基本数据类型交叉2.3 对象类型交叉 三、联合类型四、类型缩减 一、简介 TypeScript 中的交…...
数组和字符串-字符串
最长公共前缀 题意: 给多个字符串,找最长前缀 解: 暴力匹配,先按字典序排序字符串,这样长度短的优先进行匹配,所得字符串就可能偏小 适合a aa aaa aaaa这样的数据,不过对于aa aab aabc aab…...
MySQL-索引基础
文章概要 本篇文章通过几个问题来了解MySQL中索引相关的概念。平时在学习MySQL时或多或少都听说过索引的概念,但是索引到底是个什么东西,可能还不是非常的清楚。 正文 1. 什么是索引? 索引,在MySQL中也称为键(key),…...
CentOS中自动加载802.1q模块
CentOS中自动加载802.1q模块 要想在CentOS中自动加载内核模块,需要在/etc/sysconfig/modules/目录中增加一个脚本,在此脚本中加载所需的模块。 下面是我所用的一个名为8021q.modules的脚本,用来在我的CentOS 5.3中自动加载802.1Q模块&#…...

CSP-J2022第一轮试题
...

使用Java根据表名导出与导入Sql
前言 很粗糙啊,有很多可以优化的地方,而且也不安全,但是临时用还是OK的,我这个是公司里面的单机软件,不联网。 嗨!我是一名社交媒体增长黑客,很高兴能帮助您优化和丰富关于批量作业导出和导入…...

Elasticsearch同时使用should和must
问题及解决方法 must和should组合查询,should失效。使用must嵌套查询,将should组成的bool查询包含在其中一个must查询中。 SearchRequest request new SearchRequest(); request.indices("function_log");SearchSourceBuilder sourceBuilde…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...

沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...