用QTextBrowser实现的Web浏览器

在无法使用QtWebEngine且无法通过JNI调用Android的WebView时,采用QTextBrowser构建了一个仅支持HTML4子集的简单Web浏览器。通过QtConcurrent异步加载网页,并利用正则表达式解析img标签,再通过信号更新QTextDocument以显示内容。原始代码存在局限,适合进一步扩展QTextBrowser和QTextDocument的功能以增强HTML/CSS渲染。
摘要由CSDN通过智能技术生成

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://"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值