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…...
实时口罩检测-通用模型知识蒸馏实践:小模型保持95%精度方案
实时口罩检测-通用模型知识蒸馏实践:小模型保持95%精度方案 1. 引言:当实时检测遇上模型压缩 想象一下,在一个商场入口或者办公楼大堂,需要快速、准确地判断每个人是否佩戴了口罩。这要求系统不仅要看得准,还要反应快…...
WeMos开发板
这是Arduino IDE的提示信息,表示还没有连接开发板。你需要:1. 连接WeMos开发板 到电脑的USB端口 2. 安装CH340G驱动 (如果还没安装) 3. 选择正确的开发板和端口 :- 点击「工具」→「开发板」→选择「LOLIN(WEMOS) D1 R…...
APM固件编译进阶:如何为你的Pixhawk飞控定制和编译稳定版固件(Copter-4.4.0)
APM固件编译进阶:如何为你的Pixhawk飞控定制和编译稳定版固件(Copter-4.4.0) 当你需要为特定飞行任务定制固件时,直接使用master分支的开发版固件往往不是最佳选择。本文将带你深入APM固件编译的进阶领域,专注于如何为…...
ZYNQ纯PL端设计:从Bit到Boot.bin的固化实战解析
1. ZYNQ纯PL端固化的核心挑战 第一次接触ZYNQ的开发者经常会遇到一个困惑:为什么Vivado生成的bit文件不能像传统FPGA那样直接烧录?这其实涉及到ZYNQ芯片的架构特点。ZYNQ本质上是ARM处理器(PS)和FPGA(PL)的…...
知识库 / Agent 项目上线后,Token 成本为什么会慢慢失控?
很多团队做知识库或 Agent 项目时,前期体验往往都不错。因为在 Demo 阶段,通常是:- 少量文档 - 少量用户 - 相对标准的问题 - 较短的调用链路这时系统看起来很顺,成本也不高。但项目一旦上线,很多团队会慢慢发现&#…...
SiameseUIE基础教程:从SSH登录到实体输出的完整流程详解
SiameseUIE基础教程:从SSH登录到实体输出的完整流程详解 1. 引言:信息抽取的便捷解决方案 信息抽取是自然语言处理中的核心任务之一,能够从非结构化文本中自动识别和提取关键信息。传统的信息抽取方案往往需要复杂的环境配置和大量的依赖安…...
开源软件的商业可持续性:爱、热血与面包的难题
在当今软件测试领域,开源工具如Selenium、JMeter和Postman已成为从业者的日常利器,它们以零成本、高灵活性和社区驱动的优势,大幅提升了测试效率和协作水平。然而,这些工具背后隐藏着一个尖锐矛盾:开源项目的维护者往往…...
Hunyuan-MT 7B优化升级:FP16显存优化,仅需14GB
Hunyuan-MT 7B优化升级:FP16显存优化,仅需14GB 1. 引言:高效本地翻译的新标杆 在当今多语言交流日益频繁的环境下,专业翻译工具已成为刚需。然而,大多数高质量翻译服务要么依赖云端,要么需要昂贵的硬件支…...
零基础玩转火影AI绘画:忍者绘卷镜像保姆级部署教程
零基础玩转火影AI绘画:忍者绘卷镜像保姆级部署教程 1. 前言:开启你的忍者绘画之旅 你是否曾经幻想过自己也能画出《火影忍者》那样帅气的角色?现在,借助"忍者绘卷"AI绘画镜像,即使没有任何绘画基础&#x…...
Phi-3-mini-4k-instruct-gguf企业实操:HR部门员工制度问答机器人快速上线
Phi-3-mini-4k-instruct-gguf企业实操:HR部门员工制度问答机器人快速上线 1. 项目背景与价值 HR部门每天都会收到大量关于员工制度的咨询,从考勤规则到福利政策,重复性问题占据了大量工作时间。传统的人工回复方式效率低下,且难…...
