目前,我正在将文本数据添加到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中工作
提前感谢您的帮助。
答案 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
中找到