查看完整版本: [-- Qt开源作品5-仪表盘交互 --]

QTCN开发网 -> Qt 作品展 -> Qt开源作品5-仪表盘交互 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

liudianwu 2020-04-29 09:09

Qt开源作品5-仪表盘交互

## 一、前言
Echart是百度研发团队开发的一款报表视图JS插件,功能十分强大,是本人用过的国产作品中最牛逼的,记得四五年前就在qt中使用过,当时用的浏览器控件是webkit,由于5.6以后的版本不再支持webkit,而换用webengine内核,很多人在下载使用后不能正常编译,今天特意抽空做个webengine版本,使得同时支持webkit和webengine。
在webkit中执行JS用的是webView->page()->mainFrame()->evaluateJavaScript(js);
而webengine用的是webView->page()->runJavaScript(js);
在执行效率上,webengine甩webkit好几条街,在拖动滑块动态设置值的时候,webengine的CPU占用只有1%,而webkit居然达到了7%,恐怖!怪不得webkit逐渐被qt抛弃了,webengine只是内存使用上增加了些。

## 二、代码思路
```c++
第一步:准备网页文件
```c++
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <script src="echarts.min.js"></script>
</head>
<body>
    <div id="main" style="height:300px;"></div>
</body>
</html>
```

第二步:准备JS函数
```c++
function setGaugeValue(value){
    var option = {
    tooltip : {
        formatter: "{a} <br/>{b} : {c}%"
    },
    toolbox: {
        feature: {
            restore: {},
            saveAsImage: {}
        }
    },
    series: [
        {
            name: '业务指标',
            type: 'gauge',
            detail: {formatter:'{value}%'},
            data: [{value: value, name: '完成率'}]
        }
    ]
  };
```

第三步:数据交互
```c++
void Widget::on_horizontalSlider_valueChanged(int value)
{
    QString js = QString("setGaugeValue(%1)").arg(value);
#ifdef webkit
    webView->page()->mainFrame()->evaluateJavaScript(js);
#else
    webView->page()->runJavaScript(js);
#endif
}
```

## 三、效果图
[attachment=21542]


liqingjie 2020-04-29 09:47
QT5.9的交叉编译后无法webengine,楼主知道怎么回事吗?谢谢!

liudianwu 2020-04-29 10:36
liqingjie:QT5.9的交叉编译后无法webengine,楼主知道怎么回事吗?谢谢! (2020-04-29 09:47) 

你交叉编译成功了webengine?

liqingjie 2020-05-07 11:48
没有成功。


查看完整版本: [-- Qt开源作品5-仪表盘交互 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled