Название: Почему QTextBrowser не совсем корректно грузит html страницы? Отправлено: billy4685 от Февраль 06, 2020, 16:14 Здравствуйте, господа форумчане.
Пишу простой браузер для открытия html-справки. Для этого использую класс QTextBrowser. Html страницы сохранены в web-страницы из Microsoft Office Word с использованием фильтров. Заметил некие отличия в отображении полученных html страниц браузером QTextBrowser и браузерами стандартными (Firefox, Google Chrome): 1) При использовании клавиши Ctrl и прокрутки мыши рисунки, в QTextBrowser не масштабируются, хотя размер шрифта меняется. В стандартных браузерах данное масштабирование работает. 2) Заглавие страниц в QTextBrowser отображается по левому краю, а в стандартных по центру. 3) В QTextBrowser не работают абзацы, тогда как в стандартных абзацы срабатывают. Походу QTextBrowser не все теги съедает. main.cpp Код: #include "browser_dlg.h" #include <QApplication> #include <QStyleFactory> int main(int argc, char *argv[]) { QApplication::setStyle(QStyleFactory::create("fusion")); QApplication app(argc, argv); Browser_Dlg browser_dlg; browser_dlg.show(); return app.exec(); } browser_dlg.h Код: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include "ui_browser.h" #include <QTreeWidget> namespace Ui { class MainWindow; } class Browser_Dlg : public QMainWindow { Q_OBJECT public: QString path_help; explicit Browser_Dlg(QWidget *parent = 0); ~Browser_Dlg(); Ui::MainWindow *ui; void create_tree_content(QString path_folder); QString read_title(QString path); public slots: void open_html_file(QTreeWidgetItem *itm); private: }; #endif // MAINWINDOW_H browser_dlg.cpp Код: #include "browser_dlg.h" #include <QStyleFactory> #include <QFileInfo> #include <QTextStream> #include <QDebug> #include <QDir> Browser_Dlg::Browser_Dlg(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QFont font_tree_header("Times New Roman", 12, QFont::Bold); QFont font_tree_content("Times New Roman", 10, QFont::Normal); path_help = QApplication::applicationDirPath() + "/help"; ui->tree_content->resizeColumnToContents(0); ui->tree_content->setStyle(QStyleFactory::create("windows")); ui->tree_content->resizeColumnToContents(0); ui->tree_content->setTextElideMode(Qt::ElideNone); ui->tree_content->setWordWrap(true); ui->tree_content->setFont(font_tree_content); ui->tree_content->setHeaderLabel("Содержание:"); ui->tree_content->headerItem()->setTextAlignment(0, Qt::AlignCenter); ui->tree_content->header()->setFont(font_tree_header); ui->tree_content->header()->setStretchLastSection(true); connect(ui->tree_content, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(open_html_file(QTreeWidgetItem*))); create_tree_content(path_help); } Browser_Dlg::~Browser_Dlg() { delete ui; } void Browser_Dlg::create_tree_content(QString path_folder) { QDir dir; dir.setPath(path_folder); QStringList filters_file; filters_file << "*.html" << "*.htm"; QFileInfoList files_info_list = dir.entryInfoList(filters_file, QDir::Files); foreach (QFileInfo child_info, files_info_list) { QTreeWidgetItem *item = new QTreeWidgetItem(ui->tree_content); qDebug() << "Path: " << child_info.filePath(); item->setText(0, read_title(child_info.filePath())); item->setData(0, Qt::UserRole, QVariant(child_info.filePath())); ui->tree_content->addTopLevelItem(item); } } QString Browser_Dlg::read_title(QString path) { QString title = ""; QFile file_read(path); if(file_read.open(QIODevice::ReadOnly)) { QTextStream file_read_stream(&file_read); file_read_stream.setCodec(file_read_stream.codec()); QString str = file_read_stream.readAll(); file_read.close(); QRegExp reg_title("<title>(.*)</title>"); reg_title.setMinimal(true); int pos = 0; while((pos = reg_title.indexIn(str, pos)) != -1) { title = reg_title.cap(1); break; } } return title; } void Browser_Dlg::open_html_file(QTreeWidgetItem *itm) { QString path_html = itm->data(0, Qt::UserRole).toString(); if(QFileInfo(path_html).suffix() == "html" || QFileInfo(path_html).suffix() == "htm") { ui->browser->setSource(QUrl("file:///" + path_html)); } } Может кто знает как нужно настроить QTextBrowser, что-бы работали выше перечисленные функции? Исходники также прикрепил в архиве. Само приложение и справка с htm файлами лежит по путям: /Browser/OS_WIN/release/Browser.exe /Browser/OS_WIN/release/help Название: Re: Почему QTextBrowser не совсем корректно грузит html страницы? Отправлено: Swa от Февраль 06, 2020, 16:37 Почему в БМВ есть климат контроль, а в моем запорожце нету?
Потому что эти функции не реализовали в QTextBrowser. Цитировать Может кто знает как нужно настроить QTextBrowser, что-бы работали выше перечисленные функции? Берете исходники https://code.woboq.org/qt5/qtbase/src/widgets/widgets/qtextbrowser.cpp.html (https://code.woboq.org/qt5/qtbase/src/widgets/widgets/qtextbrowser.cpp.html) и добавляете нужные вам функции. Название: Re: Почему QTextBrowser не совсем корректно грузит html страницы? Отправлено: billy4685 от Февраль 06, 2020, 16:48 Почему в БМВ есть климат контроль, а в моем запорожце нету? Потому что эти функции не реализовали в QTextBrowser. Цитировать Может кто знает как нужно настроить QTextBrowser, что-бы работали выше перечисленные функции? Берете исходники https://code.woboq.org/qt5/qtbase/src/widgets/widgets/qtextbrowser.cpp.html (https://code.woboq.org/qt5/qtbase/src/widgets/widgets/qtextbrowser.cpp.html) и добавляете нужные вам функции. Благодарю за совет. Буду разбираться. |