gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:27:59 25 4
gpt4 key购买 nike

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

提前感谢您的帮助。

最佳答案

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

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中找到

关于c++ - 如何将超链接和用户可点击操作添加到 qtextbrowser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46959824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com