如何在 qtextbrowser 中添加超链接和用户可点击操作
Posted
技术标签:
【中文标题】如何在 qtextbrowser 中添加超链接和用户可点击操作【英文标题】:How to add hyperlinks and user clickable actions into qtextbrowser 【发布时间】:2017-10-26 16:54:55 【问题描述】:目前,我正在将文本数据添加到 qtextbrowser。 在此数据中,有一个超链接(我正在使用 qregex 捕获)和一个文件路径(对于我的一个目录)。 现在,单击超链接后,我想在其中一个 linux 浏览器中打开该链接。在这里,我可以在 qtextbrowser 中打开超链接,但不能在外部工具中打开。 在点击文件路径时,我必须在该位置打开一个终端。我无法向 qt 中的文本添加操作。
我找不到任何合适的解决方案。
附加超链接的代码:和dirPath
.hpp 文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui
class MainWindow;
class MainWindow: public QMainWindow
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
;
#endif // MAINWINDOW_H
.cpp 文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui->setupUi(this);
QString hyperLink = QString::fromStdString("https://www.google.co.in/");
hyperLink = QString::fromStdString("<a href = \"") + hyperLink +
QString::fromStdString("\" >") + hyperLink + QString::fromStdString("</a>");
hyperLink = QString::fromStdString("HyperLink: ") + hyperLink;
ui->textBrowser->append(hyperLink);
QString dirLocation = QString::fromStdString("/home/user/dir");
dirLocation = QString::fromStdString("<a href = \"") + dirLocation +
QString::fromStdString("\" >") + dirLocation + QString::fromStdString("</a>");
dirLocation = QString::fromStdString("Working Directory: ") + dirLocation;
ui->textBrowser->append(dirLocation);
MainWindow::~MainWindow()
delete ui;
点击超链接,我想在系统默认浏览器中打开链接。
单击 dirPath(我当前作为超链接附加),我想在 dirPath 打开终端。
ui->textbrowser 是 QTextBrowser 的 QWidget。
我在 Linux 操作系统中工作
提前感谢您的帮助。
【问题讨论】:
linux中有很多终端,你的是哪个?你的桌面管理器是什么? @eyllanesc- 再次感谢您,对于迟到的回复感到抱歉。您的解决方案完全符合我的要求。 【参考方案1】:当我们要选择动作类型时,正确的做法是停用在浏览器中生成链接的动作,使用以下方法:
ui->textBrowser->setOpenLinks(false);
ui->textBrowser->setOpenExternalLinks(false);
然后将信号 anchorClicked 连接到我们将在其中处理所需逻辑的某个插槽:
*.h
private slots:
void onAnchorClicked(const QUrl &link);
*.cpp
connect(ui->textBrowser, &QTextBrowser::anchorClicked, this, &MainWindow::onAnchorClicked);
// old style
// connect(ui->textBrowser, SIGNAL(anchorClicked(QUrl)), this, SLOT(onAnchorClicked(QUrl)));
然后我们检查链接是否是目录,否则会尝试通过QDesktopServices::openUrl()
打开它,如果是尝试打开它但这里有一个警告,打开终端的命令取决于终端在 Linux 中有许多模拟终端的应用程序,因此没有确切的答案,在这种情况下,假设您拥有 Gnome 的桌面管理器,然后使用您的终端)。
void MainWindow::onAnchorClicked(const QUrl &link)
if(!QFileInfo(link.toString()).isDir())
QDesktopServices::openUrl(link);
else
QProcess::startDetached(QString("gnome-terminal --working-directory=%1").arg(link.toString()));
完整的例子可以在下面的link找到
【讨论】:
以上是关于如何在 qtextbrowser 中添加超链接和用户可点击操作的主要内容,如果未能解决你的问题,请参考以下文章