qt显示echart_Qt配置,载入html,Echart, 交互

一、下载、安装、配置

b)      编译器下载,本次要用到MSVC的编译器,下载安装visual studio 2017 版本(某博客说该版本支持 QWebEngineView)

c)      QT 安装过程中缺少组件可在QT安装目录下找到 MaintenanceTool.exe 添加;

i.          需要注册,或者更新 MaintenanceTool.exe;

iii.          组件选择时勾选要使用的QT相关的组件尤其是 webengine;

d)      环境变量配置;将QT编译器的include 和 bin 添加到系统 path;(有说法不用配置)

i.          C:\Qt\Qt5.9.0\5.9\msvc2017_64\include

ii.          C:\Qt\Qt5.9.0\5.9\msvc2017_64\bin

e)      打开Qt Creator ->工具->选项->构建和运行 配置Kit;

i.          主要包括 编译器、调试器、Qt 版本 三个信息;

ii.

f)       打开QT安装目录下的Examples ;

i.          C:\Qt\Qt5.9.0\Examples\Qt-5.9\webenginewidgets

ii.          编译运行其中的 minimal项目,成功即可。

二、QT 项目结构简介

三、QT 使用QWebEngineView 显示 html

a)      工程文件 .pro 中添加

QT += webenginewidgets webchannel

i.          Webenginewidgets (web显示类,用于显示web界面)

ii.          Webchannel(web数据通道类,用于数据通信)

b)      双击打开界面ui,在UI编辑器中添加一个widget,(建议改名,ganttChart)并将widget提升为“QWebEngineView” ;

c)      在工程中引入html文件和相关的js等资源;项目右键->Add Existing Directory

d)      在代码中载入html; (添加对应的头文件)

QString htmlpath ="D:/Qt_project/QtCommDialog/demo1/a.html";

ui->ganttChart->load(QUrl(htmlPath));

e)      选择MSVC 2017 编译器运行即可显示html页面;

四、QT 调用前端 js

a)      QT是通过QWebEngineView来调用HTML页面的,而HTML是通过JS来调用ECharts。因此QT可以通过QWebEngineView调用加载的html页面中的JS方法,先将HTML页面中JS设置ECharts属性的那段代码封装成一个方法供QWebEngineView调用。

b)      在QT工程中的UI界面中增加一个QPushButton并添加信号和槽函数,在槽函数中添加如下代码;

槽函数代码:(封装成 json 数据)

QJsonObject seriesData;

QJsonArray data1 = {1, 3, 9, 27, 81, 247};

seriesData.insert("data1", data1);

QString optionStr = QJsonDocument(seriesData).toJson();

QString js = QString("init2(%1)").arg(optionStr);

ui->ganttChart->page()->runJavaScript(js);

js 代码:

function init2(str){

// 指定图表的配置项和数据

var option = {

title: {

text: '第一个 ECharts 实例'

},

tooltip: {},

legend: {

data:['销量']

},

xAxis: {

data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]

},

yAxis: {},

series: [{

name: '销量',

type: 'bar',

data: str["data1"]

}]

};

// 使用刚指定的配置项和数据显示图表。

myChart.setOption(option);

}

五、Qt与前端交互Qwebchannel

a)      QWebEngine实现一个能打开网页的简单浏览器的基础的项目;

b)      本地应用与网页端之间的通讯过程,是通过信号和槽函数实现的,本地应用通过发送信号达到把信息发送到网页端,而网页端通过直接调用槽函数实现把信息传到本地应用。很简单,就是本地应用通过发送通讯类的信号通知网页端,网页端通过直接调用通讯类的槽函数来通知本地应用。网页端对本地应用的操作一定要调用槽函数,写在public slots 限定符下面的槽函数,不能是普通的public函数。

流程:

i.          实现一个继承于QObject的类(以下简称通信类),此类包含本地应用与网页端通信的所有方法(信号,槽函数的方式);

ii.          给本地应用的网页载体QWebEnginePage对象注册通信类对象;

iii.          网页实现中引入qwebchannel.js,创建网页端的QWebChannel对象并与本地应用的通信类对像进行关联,最终实现网页端能够直接访问通信类的方法与本地应用进行通讯;

六、信号槽函数使用

signals:

void findNext(const QString &str, Qt::CaseSensitivity cs);

void findPrevious(const QString &str, Qt::CaseSensitivity cs);

private slots:

void findClicked();

void enableFindButton(const QString &text);

a)      发送信号  emit findPrevious(text, cs);

b)      槽函数:需要在GUI里添加;

c)      connect(ui->pushButton_2,SIGNAL(clicked()),this, SLOT(onResizeEcharts()));

d)      一个信号可以连接多个槽函数,这些槽会一个接一个的被调用,但是它们的调用顺序是不确定的。

七、Shared library

a)      创建动态链接库

i.          创建Library项目

ii.          创建UI文件

iii.          编辑UI文件,添加widget 提升为QWebEngineView;

iv.          根据UI文件编辑头文件和源文件(将代码和UI关联,然后在代码控制UI控件)

b)      使用动态链接库

i.          创建项目

ii.          将动态链接库的四个文件拷贝到项目目录下

iii.          编辑项目的pro文件

INCLUDEPATH 这一行就是为了让我们的项目可以找到 ganttchardll.h 和 ganttchardll_global.h 这两个文件,你需要把这里的路径替换成符合你的工程的路径。LIBS 这一行则需要告诉编译器(注意,这里是编译器)到哪里去找到这个 dll 文件。

iv.          编辑源文件

v.          找到工程下的exe文件,运行缺少dll,将dll复制到当前文件;(运行时需要dll,查找顺序:当前路径-系统路径)

vi.          运行即可。

c)      更新dll

共享库的一个好处是可以动态加载,也就是说,如果你需要升级程序,那么就要简单的替换掉这个 dll 就好了,不需要要求用户重新安装全部文件。当然,这些 dll 也是有缺点的:动态加载的东西肯定会比静态编译的东西效率低一些。不过在现在的硬件环境下,这点性能损失已经可以忽略不计了。

1、修改共享库的代码,添加一个按钮,槽函数为点击关闭。

2、选择重新构建项目

3、将项目目录下的dll替换新的dll。

4、运行即可

八、项目源码

九、参考文献

Qt 基础通识:

qt加载EChart 调用js:

Qt UI和 代码关联:

Qt 动态链接库:

qt html webchannel 通信:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SignalR在React/Go技术栈的实践

哼哧哼哧半年,优化改进了一个运维开发web平台。本文记录SignalR在react/golang 技术栈的生产小实践。01背景有个前后端分离的运维开发web平台, 后端会间隔5分钟同步一次数据,现在需要将最新一次同步的时间推送到web前端。说到[web服务端推送]…

UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)

题意&#xff1a;有n支队伍&#xff08;n是2的整数幂&#xff0c;2<n<4&#xff09;&#xff0c;打淘汰赛&#xff0c;胜者进入下一轮&#xff0c;其中1号队伍能打败至少一半的队伍&#xff0c;对于它不能打败的队伍l&#xff0c;一定存在一支它能够打败的队伍w&#xff…

conversion to dalvik format failed with error 1的解决办法

android低版本工程&#xff08;如1.5&#xff09;放到高版本环境中&#xff08;如2.2&#xff09;可能会上述错误&#xff0c;解决方法如下&#xff1a; 1。 如果不修改android sdk版本&#xff0c;则使用project clean 命令作用于某工程即可。 &#xff08;该处理方式…

16张扎心漫画,戳中女生私密日常,每一幕都很真实

全世界只有3.14 % 的人关注了爆炸吧知识比利时的插画师Planet Prudence&#xff0c;画了很多女生的真实日常&#xff0c;每一幕都很戳心&#xff0c;一起来看看吧。别人的痘痘一长就是一个&#xff0c;我一长就是一片。买买买的时候爽得要命&#xff0c;要穿的时候总觉得自己没…

刷magisk模块后不能开机_刷Magisk模块开机卡Logo了怎么办?两种方法教你轻松解决...

虽然&#xff0c;Magisk由于工作原理的不同&#xff0c;其模块对系统的兼容性相比较于此前的Xposed框架模块要好得多&#xff0c;但是依旧有可能出现刷了模块之后&#xff0c;卡Logo&#xff0c;无法开机的情况。今天&#xff0c;小编就提供两种方式解决刷Magisk模块卡开机Logo…

Linux添加用户(user)到用户组(group)

转载自“http://xxx.11tea.com/blog/15654” 将一个用户添加到用户组中&#xff0c;千万不能直接用&#xff1a; usermod -G groupA 这样做会使你离开其他用户组&#xff0c;仅仅做为 这个用户组 groupA 的成员。 应该用 加上 -a 选项&#xff1a; usermod -a -G groupA user (…

Magicodes.IE 2.5.6.2发布

2.5.6.22021.10.13支持自定义列字体颜色&#xff0c;具体见PR#342&#xff0c;感谢xiangxiren修复日期格式化的问题&#xff0c;具体见PR#344&#xff0c;感谢ccccccmd2.5.6.12021.10.06修复 #337&#xff0c;bool?类型导出的映射问题2.5.6.02021.10.05合并Magicodes.EPPlus到…

html的标签和标记有啥区别,HTML 元素 b 和 strong 有什么区别?//(强调标签的理解)...

不要动不动就把英语的术语、名称或概念牵强地翻译成中文。不是「粗体和加重有什么区别」(原题如此)&#xff0c;是「HTML 标签 和 有什么区别」。HTML 的标签负责将内容标记为 HTML 元素&#xff0c;浏览器的默认 CSS 样式表负责按照 W3C 的建议来指定 HTML 元素的默认样式。…

一个让我很不爽的外包项目——奔驰Smart2015新官网

七月份的下半个月&#xff0c;有幸做了奔驰 Smart 2015年新官网&#xff0c;包括手机端和PC端的宣传页&#xff0c;地址&#xff1a; PC端手机端这里&#xff0c;为了证明这个是一个事实&#xff0c;我还特意的留存了两张截图&#xff1a; 这里只想说明这么几个问题&#xff1a…

备赛脱脂经验分享_IEO国际经济学奥林匹克初选宏观备赛经验分享

背景介绍&#xff1a;国际经济学奥林匹克(IEO)是13项国际科学类奥林匹克竞赛(International Science Olympiads)之一&#xff0c;面向全球高中学生&#xff0c;旨在鼓励对经济学、财务和商业感兴趣的学生&#xff0c;激发他们用创造性方式解决问题。IEO由诺贝尔经济学获奖者、哈…

为什么饮料瓶大都是圆的,牛奶盒却是方的?原因你想不到

全世界只有3.14 % 的人关注了爆炸吧知识每日看着电视玩着手机再喝着饮料那是相当美好但是喝了这么久的饮料你有没有想过一个问题为什么饮料瓶一般都是圆的&#xff1f;而牛奶盒却是方的&#xff1f;图片来源网络有的人可能会说饮料瓶要拿在手上当然是圆的舒服啊拿着一个方形的饮…

IIS相关问题及解决方案

1、问题&#xff1a;HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配 可能原因&#xff1a;在自己使用IIS发布网站之后&#xff0c;自己所使用的当前账户的密码改变了。 解决方法&#xff1a;将用户才密码改回来即可.... 2. 转载于:https://www.…

博客园html源码编辑出错,博客园小技巧

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01;在博客园写博的半年中&#xff0c;我有时会纠结于一些诸如写作格式和显示效果之类的小问题。我想任何一个热衷于在这里写博客的人都可能会遇到类似…

使用零代码平台构建应用,应该怎样转变思路?

最近两年&#xff0c;越来越多的各类零代码产品在市场上出现&#xff0c;与此同时&#xff0c;企业的数字化转型的速度也越来越快&#xff0c;零代码产品已然成为了帮助企业数字化转型的利器。技术也在不断地演进&#xff0c;其核心目的就是让开发人员能够更专注于业务逻辑&…

看了这几幅图,感觉自己物理白学了!

全世界只有3.14 % 的人关注了爆炸吧知识看完觉得自己即将成为21世纪最伟大的科学家&#xff01;据说&#xff0c;物理老师看到这几幅图&#xff0c;会说不出话来……不信&#xff0c;转给你们老师看看&#xff0c;嘿嘿嘿……来源&#xff1a;物理知识大全

vue实现搜索框记录搜索历史_2018-09-13 基于Vue的搜索栏功能实现(we-ui)

视图代码搜索取消{{item.userName}}Script代码mounted() {this.$ajax({method: "get",url: "../static/json/user1.json" //}).then(response > {let _data1 response.data;if (response.data ! undefined) {this.userList _data1.userList;}}).catch…

异步编程模式学习

最近&#xff0c;在学习C#多线程编程&#xff0c;也看了园子里的很多大牛的关于多线程的文章&#xff0c;梳理下自己的思路&#xff0c;也总结下异步编程模式的学习。 很喜欢Jimmy Zhang的文章风格&#xff0c;在刚刚学习委托和事件的时候&#xff0c;Jimmy的文章的由浅入深的写…

坚持不懈,直到成功

坚持不懈&#xff0c;直到成功。 在古老的东方&#xff0c;挑选小公牛到技场格斗有一定的程序。它们被带进场&#xff0c;向手持长的斗士攻击&#xff0c;裁判以它受戳后再向斗牛士进攻的次数多来评定这只公牛的勇程度。从今往后&#xff0c;我须承认&#xff0c;我的生命每天都…

增长率不用计算机,事业单位行测:这类资料分析题根本不用计算

【导读】中公事业单位为帮助各位考生顺利通过事业单位招聘考试&#xff0c;今天为大家带来事业单位行政职业能力测试备考资料。很多同学认为资料分析列式容易&#xff0c;计算很难。但是&#xff0c;你知道吗?资料分析中有这几类题目是完全不需要动笔计算的&#xff0c;只要列…

在Web应用中使用localforage存储离线数据

在现代Web应用中&#xff0c;我们经常会需要在本地存储一些数据&#xff0c;一方面记住用户的一些状态&#xff0c;或个性化设置&#xff0c;尤其是可以缓存一些常用&#xff08;甚至全部&#xff09;的数据&#xff0c;实现更加强大和丰富的本地交互体验。传统上说&#xff0c…