1

目前,我正在将文本数据添加到 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 操作系统中工作

提前感谢您的帮助。

4

1 回答 1

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

完整的示例可以在以下链接中找到

于 2017-10-27T14:33:42.990 回答