Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Making QLabel behave like a hyperlink

Tags:

c++

qt

how can I make a QLabel to behave like a link? What I mean is that I'd like to be able to click on it and then this would invoke some command on it.

like image 484
user336635 Avatar asked Dec 08 '11 07:12

user336635


2 Answers

QLabel does this already.

Sample code:

myLabel->setText("<a href=\"http://example.com/\">Click Here!</a>");
myLabel->setTextFormat(Qt::RichText);
myLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
myLabel->setOpenExternalLinks(true);
like image 86
cmannett85 Avatar answered Nov 12 '22 19:11

cmannett85


The answer from cmannnett85 is fine if you just want to open a URL when the link is clicked, and you are OK with embedding that URL in the text field of the label. If you want to do something slightly custom, do this:

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

Then you can connect the linkActivated signal of the label to a slot, and do whatever you want in that slot. (This answer assumes you have basic familiarity with Qt's signals and slots.)

The slot might look something like this:

void MainWindow::on_myLabel_linkActivated(const QString & link)
{
    QDesktopServices::openUrl(QUrl("http://www.example.com/"));
}
like image 29
David Grayson Avatar answered Nov 12 '22 18:11

David Grayson