目录
简述
QLabel 是 Qt 框架中的一个重要类,主要用于显示文本或图像。但是结合事件一起编程,QLabel还有其它用法,本篇主要介绍QLabel有关的点击操作,超链接和文字按钮。
相关阅读
Qt基础:QLabel控件样式表大全_qlabel样式表-优快云博客
Qt基础:QLabel控件之文本编辑与图片展示_qlabel 多行-优快云博客
1. 超链接
setOpenExternalLinks 是 QLabel类中的一个接口,以下是对它的功能描述:
- 当open被设置为true时,QLabel会自动打开包含在其文本中的超链接。如果QLabel的文本中包含 HTML 超链接(例如<a href="http://example.com">Link</a>),并且用户点击了这个超链接,系统将使用默认的浏览器打开相应的链接。
- 当open被设置为false时,点击超链接将不会触发任何操作,除非你自定义了处理超链接点击的逻辑,例如通过连接linkActivated信号到自定义的槽函数。
注意:
使用setOpenExternalLinks接口,可以控制是否能够打开QLabel文本内容中的链接,前提是标签上设置的文本InteractionFlags需要包含:
- LinksAccessibleByMouse
- LinksAccessibleByKeyboard
默认值带有LinksAccessibleByMouse属性,所以不用设置。内部采用的是QDesktopServices::openUrl()接口,所以既可以用来打开网站,也可以用来打开本地文件。
1.1 代码示例
//link
void MainWindow::createLabel1(QVBoxLayout* layout)
{
QLabel* label = new QLabel(this);
layout->addWidget(label);
label->setOpenExternalLinks(true);
//默认不用设置
//label->setTextInteractionFlags(Qt::LinksAccessibleByMouse);
//打开网址
label->setText("<a href='http://www.baidu.com'>www.baidu.com</a>");
//打开本地文件
//label->setText("<a href='file:///D:/readme.txt'>D:/readme.txt</a>");
}
1.2 运行结果
2. 文字按钮
要实现文字按钮功能,需要给QLabel添加点击事件,以下是代码实现过程。
2.1 代码示例
头文件:
#ifndef CLICKLABEL_H
#define CLICKLABEL_H
#include <QLabel>
#include <QMouseEvent>
class ClickLabel : public QLabel
{
Q_OBJECT
public:
ClickLabel(QWidget* parent = NULL);
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent* event);
private:
bool m_pressed;
};
#endif // CLICKLABEL_H
源文件:
#include "clicklabel.h"
ClickLabel::ClickLabel(QWidget* parent)
: QLabel(parent)
{
setText("");
m_pressed = false;
}
void ClickLabel::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
m_pressed = true;
}
void ClickLabel::mouseReleaseEvent(QMouseEvent * event)
{
if (!m_pressed) {
return;
}
if (event->pos().x() < 0 || event->pos().x() > size().width())
return;
if (event->pos().y() < 0 || event->pos().y() > size().height())
return;
m_pressed = false;
emit clicked();
}
调用部分如下:
//slots
void MainWindow::onLabelClicked()
{
QMessageBox::information(this, "msg", "clicked !");
}
//text button
void MainWindow::createLabel2(QVBoxLayout* layout)
{
ClickLabel* label = new ClickLabel(this);
layout->addWidget(label);
label->setText("Click Me !");
connect(label, SIGNAL(clicked()), this, SLOT(onLabelClicked()));
}
2.2 运行效果
3. 总结
- setOpenExternalLinks提供了一种方便的方式让QLabel中的超链接自动打开外部链接。
- 重构QLabel中的鼠标按下、抬起事件,可以让QLabel实现自定义点击功能。