如何在qtextbrowser

时间:2017-10-26 16:54:55

标签: c++ qt qt5 qtextbrowser

目前,我正在将文本数据添加到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;
}

点击hyperLink,我想在系统的默认浏览器中打开链接。

点击dirPath(我目前正在追加为hyperLink),我想在dirPath上打开终端。

ui-&gt; textbrowser是QTextBrowser的QWidget。

我在Linux OS中工作

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

由于我们要选择操作类型,正确的做法是停用在浏览器中生成链接的操作,以便执行以下操作:

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

中找到