【问题标题】:Insert clickable link in QLabel and detect click on this link to provoke an action在 QLabel 中插入可点击链接并检测点击此链接以引发操作
【发布时间】:2013-05-10 23:47:55
【问题描述】:

我想在我的这个应用程序中处理对链接的点击:

当我点击“输出文件”链接时,我希望能够在我的应用程序中生成一个动作。

截至今天,该链接在富文本 QLabel 中是这样描述的:

<a href="http://google.fr"><span style=" text-decoration: underline; color:#0000ff;">Output File&quot;</span></a>

(由 Qt 设计器生成)

点击后,它将打开默认的网络浏览器以访问 Google。那不是我想要的。我想要类似的东西:

<a href="#browse_output"><span style=" text-decoration: underline; color:#0000ff;">Output File&quot;</span></a>

并且能够检测到被点击的链接并做出相应的反应:

(pseudo code)

if( link_clicked.toString() == "#browse_output" ){
    on_browse_output_clicked();
}

这在 Qt 中是否可以使用 QLabel(或其他方法)?怎么样?

【问题讨论】:

  • 您可以尝试filtering events 获取 QLabel,但我不确定您如何知道链接在哪里。

标签: c++ qt hyperlink qlabel


【解决方案1】:

好的,有兴趣的我来回答一下:

  1. 禁用QLabel 的“openExternalLinks”属性
  2. QLabel 的信号linkActivated 连接到您的处理程序。

就是这样:linkActivated 为您提供了链接在参数中引用的 URL,因此我的伪代码可以完美运行。

// header
private slots:
  void on_description_linkActivated(const QString &link);

// cpp
void KernelBuild::on_description_linkActivated(const QString &link)
{
  if( link == "#browse_output" ){
    on_outfilebtn_clicked();
  }
}

【讨论】:

  • 奇怪的是,http://mailto: 等基本链接无法打开浏览器/邮件应用程序。使用此代码 + QDesktopServices::openUrl 我可以让它工作。
  • @Borzh:您只需要预先设置文本交互标志。例如:item-&gt;setTextInteractionFlags(Qt::TextBrowserInteraction); item-&gt;setOpenExternalLinks(true); item-&gt;setHtml(/*whatever*/);。在这个工作示例中,itemQGraphicsTextItem*。不需要QDesktopServices::openUrl 或自定义信号/处理程序。
  • 什么会导致 linkActivated 不触发。我正在这样做,但 linkActivated 永远不会触发。
猜你喜欢
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多