Здравствуйте, господа форумчане.
Пишу простой браузер для открытия 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
Почему в БМВ есть климат контроль, а в моем запорожце нету?
Потому что эти функции не реализовали в 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)
и добавляете нужные вам функции.
Почему в БМВ есть климат контроль, а в моем запорожце нету?
Потому что эти функции не реализовали в 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)
и добавляете нужные вам функции.
Благодарю за совет. Буду разбираться.