将要显示网页的控件提升为QWebEngineViewimage.png
    先在.pro文件上加上 QT += webenginewidgets ``webchannel

    1. // MainWidget.h文件
    2. #ifndef MAINWIDGET_H
    3. #define MAINWIDGET_H
    4. #include <QWidget>
    5. namespace Ui {
    6. class MainWidget;
    7. }
    8. class WebObject;
    9. class MainWidget : public QWidget
    10. {
    11. Q_OBJECT
    12. public:
    13. explicit MainWidget(QWidget *parent = 0);
    14. ~MainWidget();
    15. private slots:
    16. void on_okBtn_clicked();
    17. void on_callJsBtn_clicked();
    18. private:
    19. Ui::MainWidget *ui;
    20. WebObject * m_dataObj;
    21. };
    22. #endif // MAINWIDGET_H
    1. // MainWidget.cpp文件
    2. #include "MainWidget.h"
    3. #include "ui_mainwidget.h"
    4. #include "WebObject.h"
    5. #include <QWebChannel>
    6. MainWidget::MainWidget(QWidget *parent) :
    7. QWidget(parent),
    8. ui(new Ui::MainWidget)
    9. {
    10. ui->setupUi(this);
    11. // 将html加载到qt窗口中
    12. ui->webView->load(QUrl("qrc:/index.html"));
    13. // 创建子类
    14. m_dataObj = new WebObject();
    15. //重要设置
    16. QWebChannel *channel = new QWebChannel(this);
    17. channel->registerObject("person", m_dataObj);
    18. ui->webView->page()->setWebChannel(channel);
    19. }
    20. MainWidget::~MainWidget()
    21. {
    22. delete ui;
    23. }
    24. // 与js双向交互
    25. void MainWidget::on_okBtn_clicked()
    26. {
    27. bool ok;
    28. QString name = ui->nameEdit->text().trimmed();
    29. int age = ui->ageEdit->text().trimmed().toInt(&ok, 10);
    30. if (!ok)
    31. {
    32. age = 0;
    33. }
    34. m_dataObj->setName(name);
    35. m_dataObj->setAge(age);
    36. }
    37. void MainWidget::on_callJsBtn_clicked()
    38. {
    39. //执行网页 JS
    40. QString strJs = ui->jsEdit->toPlainText();
    41. ui->webView->page()->runJavaScript(strJs);
    42. }
    1. // WebObjece.h
    2. #ifndef WEBOBJECT_H
    3. #define WEBOBJECT_H
    4. #include <QObject>
    5. class WebObject : public QObject
    6. {
    7. Q_OBJECT
    8. //供网页 JS 使用的属性
    9. Q_PROPERTY(QString name MEMBER m_name NOTIFY sig_nameChanged)
    10. Q_PROPERTY(int age MEMBER m_age NOTIFY sig_ageChanged)
    11. public:
    12. explicit WebObject(QObject *parent = 0);
    13. void setName(const QString& name);
    14. void setAge(int age);
    15. signals:
    16. void sig_nameChanged(const QString& name);
    17. void sig_ageChanged(int age);
    18. public slots:
    19. //供网页 JS 调用
    20. void slot_debug(const QString& msg);
    21. private:
    22. QString m_name;
    23. int m_age;
    24. };
    25. #endif // WEBOBJECT_H
    1. // WebObjece.h
    2. #include "WebObject.h"
    3. #include <QDebug>
    4. WebObject::WebObject(QObject *parent) : QObject(parent)
    5. {
    6. m_name = "owenlang";
    7. m_age = 26;
    8. }
    9. void WebObject::setName(const QString &name)
    10. {
    11. if (name != m_name)
    12. {
    13. m_name = name;
    14. emit sig_nameChanged(m_name);
    15. }
    16. }
    17. void WebObject::setAge(int age)
    18. {
    19. if (age != m_age)
    20. {
    21. m_age = age;
    22. emit sig_ageChanged(m_age);
    23. }
    24. }
    25. void WebObject::slot_debug(const QString& msg)
    26. {
    27. qDebug() << "web debug: " << msg;
    28. }

    WebEngineTest.zip
    参考文章:https://www.bbsmax.com/A/n2d9VOlVzD/