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…...
如何在极域电子教室控制下找回学习自主权
如何在极域电子教室控制下找回学习自主权 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否经历过这样的场景?老师在全班电脑上开启了极域电子教室的屏幕广播&…...
Solana验证节点同步太慢?保姆级快照下载与加速同步配置指南
Solana验证节点同步太慢?保姆级快照下载与加速同步配置指南 运行Solana验证节点时,最令人头疼的莫过于漫长的区块同步过程。我曾亲眼见过一个节点花了整整三天才完成同步,期间消耗的服务器资源和运维精力让人抓狂。不过别担心,通…...
深入解析Bert算法模型:从理论到实践
1. Bert模型的前世今生 第一次接触Bert是在2018年底,当时团队里有个同事兴奋地跑过来跟我说:"快看这个新模型,在11项NLP任务上都刷新了记录!"我至今记得那份技术报告上惊人的数字——在GLUE基准测试上比人类标注员高出7…...
旧iPhone复活指南:用Legacy-iOS-Kit让老设备重获新生
旧iPhone复活指南:用Legacy-iOS-Kit让老设备重获新生 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 你…...
gte-base-zh模型服务治理:Xinference多租户隔离与资源配额控制实践
gte-base-zh模型服务治理:Xinference多租户隔离与资源配额控制实践 1. 项目背景与需求场景 在实际的企业级AI应用部署中,我们经常面临这样的挑战:多个团队或项目需要共享同一个模型服务,但各自有不同的资源需求和隔离要求。传统…...
3大核心功能解析:ArchivePasswordTestTool高效恢复加密压缩包密码
3大核心功能解析:ArchivePasswordTestTool高效恢复加密压缩包密码 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool ArchivePassw…...
HiveSQL实战:5个高频业务场景的SQL解法(附完整代码)
HiveSQL实战:5个高频业务场景的SQL解法(附完整代码) 在数据驱动的商业环境中,HiveSQL已成为企业数据分析师和工程师的必备技能。无论是电商平台的用户行为分析,还是教育机构的学生成绩统计,亦或是社交媒体的…...
ViT图像分类-中文-日常物品实战教程:中文标签本地化翻译与多语言扩展方法
ViT图像分类-中文-日常物品实战教程:中文标签本地化翻译与多语言扩展方法 想用AI模型识别你手机里的照片,却苦于模型只认识英文标签?比如,你拍了一张“包子”的照片,模型却告诉你这是“steamed stuffed bun”。今天&a…...
痞子衡嵌入式:turbo-spiboot - 一种基于MCUBoot协议的二级SPI加载APP提速方案必
前面我们对 Kafka 的整体架构和一些关键的概念有了一个基本的认知,本文主要介绍 Kafka 的一些配置参数。掌握这些参数的作用对我们的运维和调优工作还是非常有帮助的。 写在前面 Kafka 作为一个成熟的事件流平台,有非常多的配置参数。详细的参数列表可以…...
保姆级教学:实时手机检测-通用镜像部署与使用全流程
保姆级教学:实时手机检测-通用镜像部署与使用全流程 1. 模型简介与核心优势 1.1 模型技术背景 实时手机检测-通用模型是基于DAMOYOLO-S框架开发的高性能目标检测模型。DAMO-YOLO是一个专门为工业落地设计的目标检测框架,在保持高速推理的同时…...
