Qt与Echarts混合编程


Echarts是一款开源、功能强大的数据可视化产品,其图表库丰富且美观。使用Echarts与Qt混合编程,可以将Echarts上的一些图表在界面上显示出来,如故障树。

1、非传参

下载Echarts

首先,在官网下载Echarts,可以从apache下载(链接:https://echarts.apache.org/zh/download.html ),因为使用Qt是用的C++语言,对于java中的文件等不了解,所以建议使用网站上的在线定制功能,最后生成一个,echars.min.js的包,可以直接使用。
图片说明

下载图表

登录Echars官网,选择其中需要的实例,本人使用的是故障树,故选择的是树图。
图片说明

Qt程序设计

Qt使用Echarts可以使用WebEngineView、WebView或者WebEngine等,WebEngineView是Qt提供于动态渲染并显示网页内容的web引擎视图,本身是一个web浏览器;WebView是一个用于显示网页内容的组件,是在可用平台上使用本机API实现的,并不要求一定将包含完整的web浏览器堆栈作为应用程序的一部分,因此应用程序更加轻量。但是不知是版本还是其他问题,在Qt 5.10中未能成功调用WebView,故使用了WebEngineView方式。
步骤:

  • 在.pro文件中加入webenginewidgets模块
  • 头文件中引入#include <QtWebEngineWidgets/QWebEngineView>
  • 将下载的echarts与html文件放到同一文件夹中
  • 在qt中打开html文件,在中的src中将echarts的地址改为相对于运行文件的地址(地址很重要,后面单独说)
    图片说明
  • 编写Qt程序,调用html文件
    #include "WidgetEcharts.h"
    #include "ui_WidgetEcharts.h"
    WidgetEcharts::WidgetEcharts(QWidget *parent) :
      QWidget(parent),
      ui(new Ui::WidgetEcharts)
    {
      ui->setupUi(this);
      QWebEngineView *pEngView = new QWebEngineView(this);
      pEngView->setContextMenuPolicy(Qt::NoContextMenu);
      pEngView->load(QUrl("file:///" + qApp->applicationDirPath() + "/tree.html"));
      pEngView->show();
    }
    WidgetEcharts::~WidgetEcharts()
    {
      delete ui;
    }
    大概的效果图就是这样了:
    图片说明

地址问题

之所以说地址重要,是因为自己就在地址上耽误了时间,地址分为调试地址和封装后的地址。
首先,WebEngineView读取html文件,可以有两种方式:

/******第一种*********/
pEngineView->setUrl(QUrl("qrc:/tree.html"));
/******第二种********/
pEngineView->load(QUrl("file:///"+qApp->applicationDirPath()+"/tree.html"));

第一种方式下的地址:当使用第一种方式时,可以将echarts与html文件都放入resource文件中,做成资源文件,所以使用时不需考虑过多的地址问题。
两种方式均可调用,但是在开始调用的第一种方式,本来电脑上的项目及环境丢失掉了,重新再配置之后,第一种方式便出现了问题。所以又用的第二种,但是,使用第二种就会有地址的问题,地址问题则分为调试地址与封装地址。
调试(Debug)地址:调试时,load的路径为Debug文件目录中,所以要将echarts与html文件都放入其中。
封装(relase)地址:封装后,load的路径是封装成品后的文件目录,所以要将echars与html文件都放入其中。