如何在没有QLabel的情况下在Qt中添加超链接?

时间:2017-08-22 00:09:00

标签: c++ qt hyperlink

我在QWidget中嵌套了一些标签和布局,以构建侧边栏的一部分。每个QWidget都是它自己的部分,一个组件目前看起来像这样:

screenshot of gui

据我了解,你只能用QLabel设置超链接,但我试图让白线之间的整个区域可以点击。这包括图标和空白。有没有办法实现这个目标?

这标记为与我要求的相反的重复,所以我想重申我正在尝试实现一个超链接而不用 QLabel。

2 个答案:

答案 0 :(得分:2)

您可以轻松地让小部件在点击时打开链接:

<FilesMatch "[^.]+\.cgi$">
  SetHandler cgi-script
</FilesMatch></blockquote>

您可以避免任何额外的信号和连接,并让每个链接小部件在内部存储自己的链接,该URL可以在构造时设置并随时更改。不使用信号和插槽也可以更轻松地更改链接,而无需断开先前的连接。

当您想要不同的任意行为时,IMO寻求信号和插槽解决方案是合理的。在这种情况下,您始终需要相同的 - 打开特定链接,因此您可以对其进行硬编码,以获得更简单,计算效率更高的解决方案。

答案 1 :(得分:1)

我只需手动捕获SIGNAL for clicked()并使用桌面服务打开代码中的url。

bool QDesktopServices::openUrl ( const QUrl & url ) [static]
  

在适当的Web浏览器中为用户的桌面环境打开给定的URL,如果成功则返回true;否则返回false。

http://doc.qt.io/qt-4.8/signalsandslots.html

使用这种类型的语法,或者在设计器中,您还可以将信号连接到插槽。

connect(widgetThatRepresentsURL, SIGNAL(clicked()),
    handlerThatWillOpenTheURL, SLOT(clicked_on_url()));

对于没有为点击设置信号的小部件(或您感兴趣的任何事件),您可以对有问题的小部件进行子类化并重新实现......

void QWidget::mousePressEvent ( QMouseEvent * event )   [virtual protected]

专门用于创建信号,有emit。我过去曾经使用过这个,如下所示

void Cell::focusInEvent(QFocusEvent *e)
{
  emit focus(this, true);
  QLineEdit::focusInEvent(e);
}

标题中包含以下内容

signals:
  void focus(Cell *, bool);