在最新Qt5.4,使用QWebengine,如何js调用webservice接口Qt

pyqt5 qwebengineview,qwebengineview 崩溃_pyqt qwebengineview_pyqt5 webengine_pyqt5_qwebengineview js_qwebengineview优化_qwebengineview 例子_qwebengineview教程_qt qwebengineview - 一点通
pyqt5 qwebengineview5468人阅读
//Qt(115)
//Qt for Windows(32)
//小Demo(45)
//网络(12)
//Windows(50)
Qt慢慢淘汰了古老的Webkit&,用WebEngine框架代替掉了。Webengine与webkit不同的是它是基于Chromium引擎的,也就是集成谷歌的引擎。
关于Qt Webkit 的未来,Qt 5.4 beta 的发布公告是这样说的:
Qt 5.4 also contains Qt WebKit. It is still supported, but as of Qt 5.4 we consider it done, so no new functionality will be added to it. We are also planning to deprecate Qt WebKit in future releases, as the new Qt WebEngine provides what is needed. In most
use cases, migrating from Qt WebKit to Qt WebEngine is rather straightforward.
再说Webkit的网络层、UI层用的是自己的,bug比较多,比如内存泄露、web兼容性等。基于chromium上的content api封装,投入比较小、html5支持很好、背靠谷歌,不二之选。
不过,截止至目前官方提供的Web框架都没有对Android提供支持,希望Qt开发者加紧脚步啊。
这里做了一个很简单的小示例:
1、pro文件添加如下内容:
QT += webenginewidgets
2、头文件是这样的:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include &QMainWindow&
#include &QWebEngineView&
namespace Ui {
class MainW
class MainWindow : public QMainWindow
& & Q_OBJECT
& & explicit MainWindow(QWidget *parent = 0);
& & ~MainWindow();
protected:
& & void resizeEvent(QResizeEvent *);
& & Ui::MainWindow *
& & QWebEngineView*
#endif // MAINWINDOW_H
3、源文件是这样的:
#include &mainwindow.h&
#include &ui_mainwindow.h&
MainWindow::MainWindow(QWidget *parent) :
& & QMainWindow(parent),
& & ui(new Ui::MainWindow)
& & ui-&setupUi(this);
& & view = new QWebEngineView(this);
& & view-&load(QUrl(&/&));
& & view-&show();
MainWindow::~MainWindow()
void MainWindow::resizeEvent(QResizeEvent *)
& & view-&resize(this-&size());
4、运行效果:
以上是简单的示例。有小伙伴想实现左键点击直接进入下一页的功能,本身QWebengineView已经自己做了,我们只需要重载它写的方法就行了,可以看QWebengineView的源码。QWebEngineView *createWindow(QWebEnginePage::WebWindowType type);这个方法就是我们要重载的。
1、新建类SWebEngineView(这个类名是我随便起的,你们可以按照需要改)
#ifndef SWEBENGINEVIEW_H
#define SWEBENGINEVIEW_H
#include &QWidget&
#include &QWebEngineView&
class SWebEngineView : public QWebEngineView
& & Q_OBJECT
& & explicit SWebEngineView(QWidget *parent = 0);
protected:
& & &* @brief createWindow 在鼠标左键点击的时候会触发这个方法
& & &* @param type
& & &* @return
& & QWebEngineView *createWindow(QWebEnginePage::WebWindowType type);
#endif // SWEBENGINEVIEW_H
#include &swebengineview.h&
SWebEngineView::SWebEngineView(QWidget *parent) : QWebEngineView(parent)
QWebEngineView *SWebEngineView::createWindow(QWebEnginePage::WebWindowType type)
& & Q_UNUSED(type);
好了,类做好了。只需要将原来的QWebEngineView替换成SWebEngineView就OK了。
代码已上传CSDN:
以下代码是做了一个简单的返回按钮,还有点小问题,有时间再修正,只是个思路。
先看一下效果:
swebengineview.h:
#ifndef SWEBENGINEVIEW_H
#define SWEBENGINEVIEW_H
#include &QWidget&
#include &QWebEngineView&
#include &QMouseEvent&
class SWebEngineView : public QWebEngineView
& & Q_OBJECT
& & explicit SWebEngineView(QWidget *parent = 0);
& & QList&QUrl& listUrl()
& & void addItemUrl(QUrl url);
protected:
& & &* @brief createWindow
& & &* @param type
& & &* @return
& & QWebEngineView *createWindow(QWebEnginePage::WebWindowType type);
& & QList&QUrl& m_listU
#endif // SWEBENGINEVIEW_H
swebengineview.cpp:
#include &swebengineview.h&
#include &QDebug&
SWebEngineView::SWebEngineView(QWidget *parent) : QWebEngineView(parent)
QList&QUrl& SWebEngineView::listUrl() const
& & return m_listU
void SWebEngineView::addItemUrl(QUrl url)
& & m_listUrl &&
QWebEngineView *SWebEngineView::createWindow(QWebEnginePage::WebWindowType type)
& & Q_UNUSED(type);
& & m_listUrl && this-&url();
mainWindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include &QMainWindow&
#include &QPushButton&
#include &swebengineview.h&
namespace Ui {
class MainW
class MainWindow : public QMainWindow
& & Q_OBJECT
& & explicit MainWindow(QWidget *parent = 0);
& & ~MainWindow();
protected:
& & void resizeEvent(QResizeEvent *);
private slots:
& & void onBackBtnClicked();
& & Ui::MainWindow *
& & SWebEngineView* m_view = Q_NULLPTR;
& & QPushButton* m_backBtn = Q_NULLPTR;
#endif // MAINWINDOW_H
mainWindow.cpp:
#include &mainwindow.h&
#include &ui_mainwindow.h&
#include &QDebug&
MainWindow::MainWindow(QWidget *parent) :
& & QMainWindow(parent),
& & ui(new Ui::MainWindow)
& & ui-&setupUi(this);
& & this-&resize(800,600);
& & m_view = new SWebEngineView(this);
& & QUrl url = QUrl(&/&);
& & m_view-&load(url);
& & m_view-&addItemUrl(url);
& & m_view-&show();
& & m_backBtn = new QPushButton(this);
& & m_backBtn-&resize(100,30);
& & m_backBtn-&move(0,0);
& & m_backBtn-&setText(tr(&Back&));
& & connect(m_backBtn, SIGNAL(clicked(bool)), this, SLOT(onBackBtnClicked()));
MainWindow::~MainWindow()
void MainWindow::resizeEvent(QResizeEvent *)
& & m_view-&resize(this-&size());
void MainWindow::onBackBtnClicked()
& & QList&QUrl& list = m_view-&listUrl();
& & QUrl currentUrl = m_view-&url();
& & int currentValue = -1;
& & if(list.contains(currentUrl)) {
& & & & currentValue = list.indexOf(currentUrl);
& & & & if(currentValue & 1) {
& & & & & & m_view-&load(list.at(currentValue - 1));
& & & & } else {
& & & & & & m_backBtn-&setEnabled(false);
& & } else {
& & & & m_view-&addItemUrl(currentUrl);
& & & & m_view-&load(list.last());
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:118278次
积分:3407
积分:3407
排名:第10378名
原创:222篇
评论:119条
(8)(13)(10)(15)(1)(14)(10)(8)(6)(3)(5)(13)(13)(86)(25)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'Qt 5.7使用QWebEngine加载html做UI,但运行库却近70M,如何能减少体积? - 知乎80被浏览5903分享邀请回答/archive/p/chromiumembedded/这是一个剪裁过的Chrome浏览器内核,但是它只是个内核,要做成App还需要你自己搞定很多事情。215 条评论分享收藏感谢收起/p/22663686现在的几个框架,全都走chromium内核了,无论你怎么裁剪,都很难裁的动了。只要带的是chromium,而且是比较新的版本,压缩后基本都在3、40M以上。所以我走了个比较彻底的路线,就是做加法。直接在blink的基础上加功能,而不是在chromium的基础上减东西,这才能做到压缩后4M的大小。目前miniblink这个库已经开源,只是还有bug,等我再完善几轮吧。166 条评论分享收藏感谢收起查看更多回答1 个回答被折叠()

我要回帖

更多关于 js调用android的方法 的文章

 

随机推荐