【QT进阶】Qt Web混合编程之实现ECharts数据交互动态修改

往期回顾:

【QT进阶】Qt Web混合编程之CMake VS2019编译并使用QCefView(图文并茂超详细版本)-CSDN博客
【QT进阶】Qt Web混合编程之html、 js的简单交互-CSDN博客
【QT进阶】Qt Web混合编程之使用ECharts显示各类折线图等-CSDN博客

【QT进阶】Qt Web混合编程之实现ECharts数据交互动态修改

一、QWebEngineView

再次复习:

QWebEngineView是Qt框架中的一个类,用于显示Web内容。它基于Chromium引擎,可以加载和显示Web页面,并支持与Web页面交互。我们可以使用QWebEngineView来在Qt应用程序中集成Web内容,实现丰富的Web功能和交互体验。

1.四个重载函数runJavaScript

QWebEngineView类的四个重载函数runJavaScript

|------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------|
| void runJavaScript(const QString& scriptSource); . | 在当前页面中执行JavaScript代码,传入的参数为要执行的JavaScript代码的字符串。 |
| void runJavaScript(const QString& scriptSource, quint32 worldId); | 在指定的世界(world)中执行JavaScript代码,worldId参数指定了要在哪个世界中执行JavaScript代码。 |
| void runJavaScript(const QString& scriptSource, const QWebEngineCallback<const QVariant &> &resultCallback); | 用于在当前页面中执行JavaScript代码,并在执行完毕后调用resultCallback回调函数,将执行结果作为参数传递给回调函数。 |
| void runJavaScript(const QString& scriptSource, quint32 worldId, const QWebEngineCallback<const QVariant &> &resultCallback); | 用于在指定的世界中执行JavaScript代码,并在执行完毕后调用resultCallback回调函数,将执行结果作为参数传递给回调函数。 |

二、具体示例

1、显示echarts图表

在Widget类的构造函数中,通过设置echarts图表的HTML文件路径,将该路径传递给QWebEngineView组件,以显示echarts图表。

复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QString path = qApp->applicationDirPath() + "/echarts/line-simple.html";
    ui->widget->setUrl(QUrl(path));
}

2、信号槽链接初始化函数

on_btnDefault_clicked()槽函数在按钮被点击时会调用JavaScript函数init(),用于初始化echarts图表并展示默认数据。

复制代码
void Widget::on_btnDefault_clicked()
{
    ui->widget->page()->runJavaScript("init()");
}

init(): 初始化echarts图表并展示默认数据。

复制代码
            function init(){
                var app = {};

                var option;

                option = {
                    xAxis: {
                        type: 'category',
                        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
                    },
                    yAxis: {
                        type: 'value'
                    },
                    series: [{
                        data: [150, 230, 224, 218, 135, 147, 260],
                        type: 'line'
                    }]
                };

                if (option && typeof option === 'object') {
                    myChart.setOption(option);
                }
            }

3、转换json格式并重新定义数据

on_btnReDefine_clicked()槽函数在另一个按钮被点击时会生成一个包含x轴和y轴数据的JSON对象,将该对象转换为JSON字符串,然后调用JavaScript函数load_data(),用于重新定义echarts图表的数据。

复制代码
void Widget::on_btnReDefine_clicked()
{
    QJsonObject seriesData;

    //设置x轴数据
    QJsonArray dataX = {1, 5, 10, 15, 20, 25, 30, 35, 40};
    seriesData.insert("data_xAxis", dataX);

    //设置y轴数据
    QJsonArray dataY = {100, 70, 1230, 110, 50, 890, 79, 128, 256};
    seriesData.insert("data_yAxis", dataY);

    QString optionStr = QJsonDocument(seriesData).toJson();
    QString js = QString("load_data(%1)").arg(optionStr);

    //C++调用js方法
    ui->widget->page()->runJavaScript(js);
}

load_data(arg_json): 根据传入的JSON数据重新定义echarts图表的数据。

复制代码
function load_data(arg_json) {
                var app = {};

                var option;

                option = {
                    backgroundColor: '#1b1b1b', //背景色

                    xAxis: {
                        type: 'category',
                        //data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
                        data:arg_json["data_xAxis"]
                    },
                    yAxis: {
                        type: 'value'
                    },
                    series: [{
                        //data: [150, 230, 224, 218, 135, 147, 260],
                        data:arg_json["data_yAxis"],
                        type: 'line'
                        
                    }]
                };

HTML部分就是包含一个div元素用于显示echarts图表,引入了echarts库的JavaScript文件,并定义了两个JavaScript函数


以上就是Qt里实现ECharts数据交互动态修改的简单介绍。

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

相关推荐
灯澜忆梦17 小时前
GO_并发编程---定时器
开发语言·后端·golang
-银雾鸢尾-18 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-18 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白19 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
段一凡-华北理工大学21 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe21 小时前
C++——多态
开发语言·c++
心平气和量大福大1 天前
C#-WPF-Window主窗体
开发语言·c#·wpf
从零开始的代码生活_1 天前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸1 天前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
Quz1 天前
QML 信号与槽:直接绑定与跨文件通信
qt·编程语言·设计