Russian Qt Forum
Май 03, 2024, 19:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в QTextBrowser переходить по ссылкам по неполным путям?  (Прочитано 2721 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Декабрь 01, 2015, 00:32 »

Здравствуйте, господа форумчане. Начал я тут разбираться с виджетом QTextBrowser. Для начала решил реализовать возможность чтения html-страниц и переход по ссылкам. Для этого в папку своего проекта скинул папку с html-справкой, и с нее уже решил
грузить html-страницы и ходить по ним.

Первую страницу (index.html) удалось загрузить в QTextBrowser без проблем с помощью метода setSource(QUrl). Для перехода по ссылкам на другие страницы решил ловить сигнал anchorClicked(QUrl), и уже получив c него QUrl посылать его в setSource(QUrl).
Но так как в самой html-странице ссылки на новые страницы указаны не полным путем(каталог/html-файл) от главного каталога папки , переход по полученном QUrl не выполнялся. Поэтому решил к главному каталогу папки прибавлять полученный QUrl и уже его посылать в метод setSource(QUrl(полученный путь)).
Код:
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

readLink(QUrl("../help/index.html"));
connect(ui->exit_but, SIGNAL(clicked()), this, SLOT(close()));
connect(ui->textBrowser, SIGNAL(anchorClicked(QUrl)), this, SLOT(startLink(QUrl)));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::startLink(QUrl link)
{
  QString temp = "../help/" + link.toString();
  readLink(QUrl(temp));
}

void MainWindow::readLink(QUrl name_file)
{
  ui->textBrowser->setSource(QUrl(name_file));
}
Но и это тоже не решило проблему, так как каталог справки вмещает в себе вложенные каталоги, поэтому переход по ссылкам не всегда осуществляется (если ссылка в html указана как document/doc1.html, а полный путь ../help/teory/document/doc1.html). В то же время, если грузить эту справку с любого web-браузера, все работает.

Как можно решить эту проблему? Интересует именно работа с QTextBrowser, а не QWebView.
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #1 : Декабрь 01, 2015, 12:11 »

Все оказалось банально и просто)) Не нужно было ничего мутить с сигналами и слотами. Просто всего лишь в конструкторе подцепить файл ../help/index.html через метод setSource(QUrl("../help/index.html")). И дальше переход по ссылкам работает автоматически. Так же очень удобно использовать слоты QTextBrowser: backward() - переход на предыдущую, forward() - переход на следующую и home() - переход на домашнюю страницу.
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
ui->textBrowser->setSource(QUrl("../help/index.html"));

connect(ui->push1, SIGNAL(clicked()), ui->textBrowser, SLOT(backward()));
connect(ui->push2, SIGNAL(clicked()), ui->textBrowser, SLOT(forward()));
connect(ui->push3, SIGNAL(clicked()), ui->textBrowser, SLOT(home()));
connect(ui->exit_but, SIGNAL(clicked()), this, SLOT(close()));
}

MainWindow::~MainWindow()
{
    delete ui;
}
« Последнее редактирование: Декабрь 01, 2015, 12:15 от billy4685 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 23.