qt5.6上的webEngine暂时无法用gcc编译,也没法用在android上,用了很多办法都没法用jni来调用android java的webview,无奈之下用QTextBrowser实现一个最简单的仅支持HTML4子集的Web浏览器,QTextBrowser是没有网络读取功能的,我添加一个网络下载函数,用QtConcurrent异步加载,再用正则表达式解析img标签,然后signal把QTextDocument呈现出来。
这是原型代码,写得比较草率,有兴趣的可以扩展一下QTextBrowser/QTextDocument的源代码得到更多的HTML/CSS渲染效果
#ifndef QHTMLBROWSER_H
#define QHTMLBROWSER_H
//** for more information, please refer to http://www.one-lab.net
#include <QtConcurrent>
#include <QtNetwork/QtNetwork>
#include <QTextBrowser>
#include <QTextDocument>
#include <QMap>
#include <QRegExp>
#include <QCryptographicHash>
#include <QApplication>
class QHtmlBrowser : public QObject
{
Q_OBJECT
private:
QTextBrowser* mBrowser;
QString mUrl;
QMap<QString, QByteArray> mResources;
signals:
void loadFinished();
public slots:
void onLoadFinished();
void onRequestUrl(const QUrl& url);
public:
~QHtmlBrowser();
explicit QHtmlBrowser(QTextBrowser* browser);
void load(const QString& url);
void addResource(const QString& key, const QByteArray& bytes);
};
#endif // QHTMLBROWSER_H
#include "qhtmlbrowser.h"
//** for more information, please refer to http://www.one-lab.net
#define hit_ext(p) \
else if (src.endsWith(#p, Qt::CaseInsensitive)) \
ext = #p
#define index_tag "index"
#define images_tag "images://"