将要显示网页的控件提升为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_OBJECT
public:
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()
{
//执行网页 JS
QString 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;
}