Qt QLabel设置超链接hover时出现下划线

Posted 师从名剑山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt QLabel设置超链接hover时出现下划线相关的知识,希望对你有一定的参考价值。

Qt设置QLabel超链接hover出现下划线

文章目录

前言

由于本人在工作中遇到了一个需求,那就是鼠标覆盖label上的超链接时,添加下划线,不覆盖时就去掉下划线。所以,就有了本篇文章,来记录一下解决该问题的方法。

QLabel设置超链接

首先,我们还是简单的介绍一下,QLabel怎么设置超链接。要知道QLabel是支持html的,所以我们就可以用HTML的标签来设置超链接和下划线。

// 设置换行    
ui->label->setWordWrap(true);
ui->label->setOpenExternalLinks(true);
ui->label->setText(u8"这是一个测试的链接<style> a text-decoration: none </style><a href = www.baidu.com>百度</a>,用来测试Hover");

  1. setOpenExternalLinks 设置触发了超链接时,自动打开链接。我们可以通过调用setTextInteractionFlags 来设置对应的触发方式
  2. HTML标签里,text-decoration: underline; 来设置文字的下划线,<a href = > www.baidu.com>百度这个代表标记了一个超链接。超链接的内容为href后面跟的内容

回到正题

但是,这种情况只能设置固定显示下划线或者不带下划线。但是我们在Qt的事件种类中可以找到这样一个事件:

QEvent::CursorChange

所以,我们就来了灵感。我们将QLabel的这个事件拦截起来,然后针对不同的鼠标指针样式,来设置下划线的显示与隐藏,话不多说,直接上代码。

bool MainWindow::eventFilter(QObject* watched, QEvent* event)

    if (watched == ui->label && event->type() == QEvent::CursorChange) 
        auto&& cursor = ui->label->cursor();
        if (cursor.shape() == Qt::PointingHandCursor) 
            ui->label->setText(u8"这是一个测试的链接<style> a text-decoration: underline; </style><a href = www.baidu.com>百度</a>,用来测试Hover");
         else 
            QTimer::singleShot(10, [this] () 
                ui->label->setText(u8"这是一个测试的链接<style> a text-decoration: none; </style><a href = www.baidu.com>百度</a>,用来测试Hover");
            );
        

    

    return QWidget::eventFilter(watched, event);

效果图如下:

Note:

这里在改变下划线类型的时候,不能直接setText这样会进入一个无限循环,具体原因暂时未知,就只能暂时用定时器来触发了。

Excel超链接功能,尝试使用网站超链接时出现“无法打开指定文件”

【中文标题】Excel超链接功能,尝试使用网站超链接时出现“无法打开指定文件”【英文标题】:Excel Hyperlink Function, getting "Cannot open the specified file" when trying to use website hyperlinks 【发布时间】:2022-01-07 13:41:20 【问题描述】:

好的,所以我希望我能够在 excel 中使用 Hyperlink() 函数来获取工作票的链接,并为超链接提供更“简化”的名称,目前我将单元格 B6 作为友好名称我想使用和单元格 C6 作为票证链接。我的公式如下所示:

=HYPERLINK(Misc!C6,Misc!B6)

我在 B6 中的数据是“Example Ticket”

我在 C6 中的数据是“www.google.com”

我将 D6 作为具有公式的单元格

Cell Formatting

它确实输出了我期望的内容,这是一个标记为“示例票证”的 google.com 的新链接,但是当我单击该链接时,它会显示一条警告说“无法打开指定的文件”我已经验证了我拥有的链接在 C6 中,当我单击它时会打开 google.com,但是当我单击它创建的新链接时,它只会显示该警告。

我为此尝试使用不同的链接,包括 google.com、https://www.google.com/、www.google.com,但这些都不起作用,我也尝试过以不同方式格式化公式,但要么他们只是创建相同的链接,我这个错误,否则它们完全不起作用

=HYPERLINK(Misc!C6,Misc!B6)

=HYPERLINK(#Misc!C6,#Misc!B6)

=HYPERLINK(C6,B6)

我不确定你是否可以使用这个函数来创建这样的链接,但我想我想问问有没有人遇到过这个问题或者知道:)

复制步骤:

    在单元格 B6 中输入“示例票” 在单元格 C6 中输入“www.google.com” 在单元格 D6 中输入公式“=HYPERLINK(Misc!C6,Misc!B6)” 按 Enter 键 点击 D6 中的新链接

预期结果:

链接打开 google.com

实际结果:

错误信息显示无法打开指定的文件

Error Message

【问题讨论】:

【参考方案1】:

我将C6值设置为后成功 http://www.google.com/ 所有其他都导致了您描述的错误。因此,请考虑将其用于您的 url http://www.google.com/ 尾部斜杠似乎有所不同。

【讨论】:

谢谢老兄,成功了!【参考方案2】:

也许你应该使用这个网站

https://www.google.com

【讨论】:

以上是关于Qt QLabel设置超链接hover时出现下划线的主要内容,如果未能解决你的问题,请参考以下文章

在QT中怎么实现当单击QLabel时出现一个下拉菜单?并且选择一个项目后,前面打勾? 求高手帮忙!

QLabel 中的超链接和远程图像

没有在 QTextBrowser 中为超链接加下划线

HTML怎么把鼠标移到超链接上面弹出来一个方框?

Excel超链接功能,尝试使用网站超链接时出现“无法打开指定文件”

如何将 QLabel 放入切换按钮 Qt c++