如何在 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 中添加超链接和用户可点击操作的主要内容,如果未能解决你的问题,请参考以下文章

PyQt如何添加到QTextBrowser的链接

没有在 QTextBrowser 中为超链接加下划线

PyQt4 中的 QTextBrowser 超链接

在 QTextBrowser 中以不同方式处理不同的链接

Python PyQt5 QTextBrowser 超链接丢失部分链接

QTextBrowser append() 使文本变成超链接