将要显示网页的控件提升为QWebEngineView
先在.pro文件上加上 QT += webenginewidgets ``webchannel
// MainWidget.h文件#ifndef MAINWIDGET_H#define MAINWIDGET_H#include <QWidget>namespace Ui {class MainWidget;}class WebObject;class MainWidget : public QWidget{Q_OBJECTpublic:explicit MainWidget(QWidget *parent = 0);~MainWidget();private slots:void on_okBtn_clicked();void on_callJsBtn_clicked();private:Ui::MainWidget *ui;WebObject * m_dataObj;};#endif // MAINWIDGET_H
// MainWidget.cpp文件#include "MainWidget.h"#include "ui_mainwidget.h"#include "WebObject.h"#include <QWebChannel>MainWidget::MainWidget(QWidget *parent) :QWidget(parent),ui(new Ui::MainWidget){ui->setupUi(this);// 将html加载到qt窗口中ui->webView->load(QUrl("qrc:/index.html"));// 创建子类m_dataObj = new WebObject();//重要设置QWebChannel *channel = new QWebChannel(this);channel->registerObject("person", m_dataObj);ui->webView->page()->setWebChannel(channel);}MainWidget::~MainWidget(){delete ui;}// 与js双向交互void MainWidget::on_okBtn_clicked(){bool ok;QString name = ui->nameEdit->text().trimmed();int age = ui->ageEdit->text().trimmed().toInt(&ok, 10);if (!ok){age = 0;}m_dataObj->setName(name);m_dataObj->setAge(age);}void MainWidget::on_callJsBtn_clicked(){//执行网页 JSQString strJs = ui->jsEdit->toPlainText();ui->webView->page()->runJavaScript(strJs);}
// WebObjece.h#ifndef WEBOBJECT_H#define WEBOBJECT_H#include <QObject>class WebObject : public QObject{Q_OBJECT//供网页 JS 使用的属性Q_PROPERTY(QString name MEMBER m_name NOTIFY sig_nameChanged)Q_PROPERTY(int age MEMBER m_age NOTIFY sig_ageChanged)public:explicit WebObject(QObject *parent = 0);void setName(const QString& name);void setAge(int age);signals:void sig_nameChanged(const QString& name);void sig_ageChanged(int age);public slots://供网页 JS 调用void slot_debug(const QString& msg);private:QString m_name;int m_age;};#endif // WEBOBJECT_H
// WebObjece.h#include "WebObject.h"#include <QDebug>WebObject::WebObject(QObject *parent) : QObject(parent){m_name = "owenlang";m_age = 26;}void WebObject::setName(const QString &name){if (name != m_name){m_name = name;emit sig_nameChanged(m_name);}}void WebObject::setAge(int age){if (age != m_age){m_age = age;emit sig_ageChanged(m_age);}}void WebObject::slot_debug(const QString& msg){qDebug() << "web debug: " << msg;}
