在通过鼠标点击 QTextBrowser 中的链接地址时,如果是希望使用外部浏览器打开链接地址,只需要添加一行代码 ui->textBrowser->setOpenExternalLinks(true);
但如果是想知道用户点击的具体链接地址,则需要设置 ui->textBrowser->setOpenExternalLinks(false);
,另外再关联anchorClicked
信号,示例代码如下:
#include "widget.h"
#include "ui_widget.h"
#include <QDesktopServices>
#ifdef Q_OS_WIN
#include <windows.h>
#endif
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//此属性指定QTextBrowser是否应自动打开用户试图通过鼠标或键盘激活的链接,无论该属性的值如何,始终会发出anchorclick信号
//ui->textBrowser->setOpenLinks(false);//default value: true
//指定QTextBrowser是否应使用QDesktopServices::openUrl()自动打开指向外部源的链接,而不是发出anchorClickd信号
ui->textBrowser->setOpenExternalLinks(false);//default value: fasle
//
//ui->textBrowser->setFocusPolicy(Qt::NoFocus);
ui->textBrowser->setAlignment(Qt::AlignCenter);
//ui->textBrowser->setFrameShape(QTextEdit::NoFrame);
ui->textBrowser->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->textBrowser->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
//ui->textBrowser->document()->setDefaultTextOption(QTextOption(Qt::AlignCenter));
connect(ui->textBrowser, SIGNAL(anchorClicked(const QUrl&)),this, SLOT(anchorClickedSlot(const QUrl&)));
ui->textBrowser->append("baidu.com");
ui->textBrowser->append(QString::fromLocal8Bit("<a href = \"http://www.baidu.com/\">baidu website</a>"));
ui->textBrowser->append("weixin.com");
ui->textBrowser->append(QString::fromLocal8Bit("<a href = \"https://weixin.qq.com/\">weixin website</a>"));
}
Widget::~Widget()
{
delete ui;
}
void Widget::anchorClickedSlot(const QUrl& url)
{
//QDesktopServices::openUrl(url);
#ifdef Q_OS_WIN
ShellExecuteA(NULL, "open", url.toString().toStdString().c_str(), "", "", SW_SHOW);
#endif
}