현재 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 OS에서 작업 중입니다.
미리 도움을 주셔서 감사합니다.
작업 유형을 선택할 때 올바른 방법은 브라우저 내에서 링크를 생성하는 작업을 비활성화하는 것입니다. 이렇게하려면 다음이 사용됩니다.
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()));
}
}
전체 예제는 다음 링크 에서 찾을 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다