使QLabel表现得像超链接

51

我怎样才能使QLabel表现得像链接一样?我的意思是希望能够点击它,然后触发某个命令。

2个回答

119

QLabel已经具备这个功能

示例代码:

myLabel->setText("<a href=\"http://example.com/\">Click Here!</a>");
myLabel->setTextFormat(Qt::RichText);
myLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
myLabel->setOpenExternalLinks(true);

由于某种奇怪的原因,它不想像应该的那样正常工作。您如何设置它应该调用的fnc/action? - user336635
2
еҢ“openExternalLinks()дёғзњџдё”ж–‡жњ¬дғ¤дғ’ж ‡еү—иұ«йЂ‚еҢ“и®ңзҢ®ж—¶пәЊе°†и§¦еЏ‘QDesktopServices::openUrl()并жђғеё¦ж ‡з­ңзљ„URLгЂ‚е› ж­¤дҢ дёҚйњЂи¦ЃеЃљд»»дҢ•дғ‹жѓ…гЂ‚ - cmannett85
谢谢 +1。你知道我能否通过这个普通的函数调用来调用吗? - user336635
如果所有QLabel所做的就是调用QDesktopServices::openUrl(),那么你可以自己调用它。 - cmannett85

29

如果你只想在链接被点击时打开一个URL,并且你可以将该URL嵌入标签的文本字段中,那么cmannnett85的回答是正确的。如果你想进行一些稍微定制化的操作,请按照以下步骤:

QLabel * myLabel = new QLabel();
myLabel->setName("myLabel");
myLabel->setText("<a href=\"whatever\">text</a>");
myLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);

然后您可以将标签的linkActivated信号连接到一个槽中,在该槽中执行您希望进行的任何操作。(本答案假定您已经基本了解Qt的信号和槽。)

该槽可能如下所示:

void MainWindow::on_myLabel_linkActivated(const QString & link)
{
    QDesktopServices::openUrl(QUrl("http://www.example.com/"));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接