Qt基础:QLabel控件之超链接与可点击文本

目录

简述

相关阅读

用法1:超链接

用法2:文字按钮


简述

        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. 总结

  1. setOpenExternalLinks提供了一种方便的方式让QLabel中的超链接自动打开外部链接。
  2. 重构QLabel中的鼠标按下、抬起事件,可以让QLabel实现自定义点击功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值