如何将超链接和用户可点击操作添加到 qtextbrowser

How to add hyperlinks and user clickable actions into qtextbrowser

目前,我正在将文本数据添加到qtextbrowser。 在此数据中,有一个 hyperlink(我正在使用 qregex 捕获)和一个文件路径(对于我的一个目录)。 现在,单击 hyperlink,我想在 linux 的浏览器之一中打开 link。在这里,我可以在 qtextbrowser 中打开 hyperlinks,但不能在外部工具中打开。 单击文件路径时,我必须打开一个终端 location.I 无法向 qt 中的文本添加操作。

我找不到任何合适的解决方案。

附加 hyperlink: 和 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;
}

点击超链接,我想在系统默认浏览器中打开link

单击 dirPath(我当前附加为超链接)时,我想在 dirPath 打开终端。

ui->textbrowser是QTextBrowser的QWidget。

我在LinuxOS

工作

提前感谢您的帮助。

当我们要 select 动作类型时,正确的做法是停用在浏览器中生成 link 的动作,以便执行以下操作:

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

然后我们检查link是否是一个目录,否则它会尝试通过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