qt可点击的QLabel

需求------问题与思路

使用wpf实现一个可点击的超链接label相当简单(如下图),但是qt的QLabel不会响应点击事件,那就从QLabel继承一个类,然后在该类中重写mousePressEvent函数,并在该函数中对左键点击事件做响应处理即可,这里只是发送自定义的clicked信号,以便让QLabel像普通的QPushButton一样响应用户的点击事件。

代码

只有一个头文件ClickLabel.h

cpp 复制代码
#pragma once

#include <QObject>
#include <QLabel>
#include <QMouseEvent>

//超链接样式、响应点击信号的自定义label
class ClickLabel : public QLabel {
	Q_OBJECT
public:
	explicit ClickLabel(QWidget* parent = nullptr) : QLabel(parent) {
	}

signals:
	// 自定义的点击信号
	void clicked();

protected:
	void mousePressEvent(QMouseEvent* event) override {
		// 检查鼠标左键点击事件
		if (event->button() == Qt::LeftButton) {
			// 发出自定义的点击信号
			emit clicked();
		}
		// 将事件传递给父类处理
		QLabel::mousePressEvent(event);
	}


//在 mouseEnterEvent() 中设置下划线字体,并更新标志位以指示鼠标进入状态。
//在 mouseLeaveEvent() 中恢复正常字体,并更新标志位以指示鼠标离开状态。
protected:
	void enterEvent(QEvent* event) override
	{
		setFontUnderline(true);
		isMouseEntered = true;
		QLabel::enterEvent(event);
	}
	void leaveEvent(QEvent* event) override
	{
		setFontUnderline(false);
		isMouseEntered = false;
		QLabel::leaveEvent(event);
	}

private:
	bool isMouseEntered;

	void setFontUnderline(bool underline)
	{
		QFont font = this->font();
		font.setUnderline(underline);
		this->setFont(font);
	}
};

用法

将一个普通的QLabel控件提升为ClickLabel即可。

相关推荐
VBA633733 分钟前
VBA之Word应用第四章第五节:段落Paragraph对象的属性(一)
开发语言
whltaoin33 分钟前
【Java SE】Java IO体系深度剖析:从原理到实战的全方位讲解(包含流操作、序列化与 NIO 优化技巧)
java·开发语言·nio·se·io体系
csbysj20204 小时前
jQuery 删除元素
开发语言
xxy-mm5 小时前
Javascript 中的继承
开发语言·javascript·ecmascript
quikai19817 小时前
python练习第二组
开发语言·python
AI视觉网奇7 小时前
Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr
开发语言·c++·算法
wjs20247 小时前
并查集快速合并
开发语言
free-elcmacom7 小时前
MATLAB与高等数学<1>一道曲面积分题的几何直观
开发语言·数学建模·matlab·高等数学
LaoZhangGong1237 小时前
深度学习uip中的“psock.c和psock.h”
c语言·开发语言
Tony Bai7 小时前
Go 安全新提案:runtime/secret 能否终结密钥残留的噩梦?
java·开发语言·jvm·安全·golang