Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在没有QLabel的情况下在Qt中添加超链接?_C++_Qt_Hyperlink - Fatal编程技术网

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

C++ 如何在没有QLabel的情况下在Qt中添加超链接?,c++,qt,hyperlink,C++,Qt,Hyperlink,我在QWidget中嵌套了一些标签和布局,以构建侧边栏的一部分。每个QWidget都有自己的部分,目前有一个组件如下所示: 据我所知,您只能使用QLabel设置超链接,但我正在尝试使白线之间的整个区域都可以单击。这包括图标和空格。有没有办法做到这一点 这被标记为与我的要求相反的重复,因此我想重申,我正在尝试实现一个没有QLabel的超链接。我只需手动捕获clicked()的信号,并使用桌面服务以代码形式打开url bool QDesktopServices::openUrl ( const Q

我在QWidget中嵌套了一些标签和布局,以构建侧边栏的一部分。每个QWidget都有自己的部分,目前有一个组件如下所示:

据我所知,您只能使用QLabel设置超链接,但我正在尝试使白线之间的整个区域都可以单击。这包括图标和空格。有没有办法做到这一点


这被标记为与我的要求相反的重复,因此我想重申,我正在尝试实现一个没有QLabel的超链接。

我只需手动捕获clicked()的信号,并使用桌面服务以代码形式打开url

bool QDesktopServices::openUrl ( const QUrl & url ) [static]
在用户桌面环境的相应Web浏览器中打开给定url,如果成功,则返回true;否则返回false

使用这种语法,或者在设计器中,也可以将信号连接到插槽

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);

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

class Link : public QWidget {
  Q_OBJECT
  public:
  Link(QUrl url, QWidget p = nullptr) : QWidget(p), _url(url) {}
  QUrl _url;
  void mouseReleaseEvent(QMouseEvent *) { QDesktopServices::openUrl(_url); }
}
您可以避免任何额外的信号和连接,让每个链接小部件在内部存储自己的链接,url可以在构建时设置并随时更改。不使用信号和插槽也可以更轻松地更改链接,而无需断开以前的连接


只有当您需要不同的任意行为时,IMO才会选择信号和插槽解决方案。在这种情况下,您总是希望打开一个特定的链接,因此您不妨对其进行硬编码,并寻求更简单、计算效率更高的解决方案。

对不起,我的错,现在是凌晨3点。我看到了QLabel和hyperlink,就想“哦,别再这样了”:D@dtech别担心!!发生这种情况:)在鼠标单击处理程序中尝试
QDesktopServices::openUrl(yourURL)
。QWidget中没有单击信号。您可以创建一个或重新实现事件处理程序。我将为你补充答案。这非常有效!我不知道你能用这样的鼠标。谢谢:)