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++
<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
}
1. 国内站点:[https://gitee.com/feiyangqingyun/QWidgetDemo](https://gitee.com/feiyangqingyun/QWidgetDemo)
2. 国际站点:[https://github.com/feiyangqingyun/QWidgetDemo](https://github.com/feiyangqingyun/QWidgetDemo)
做嵌入式基本上用不到报表,但是桌面应用就经常会用到报表功能,在Qt下面可用的报表工具也挺多,需要根据具体的需求来选择,报表有的格式比较规矩,有的则比较特殊,所以要结合具体需求来选择合适的方案。
我所知道的常见的Qt报表实现方案如下:
第一次使用qt做报表打印,刚开始用的qxlsx,但是实现效果不是太好,因为报表里数据行数与列数不固定,而且要打印在一张A4纸上,用qxlsx实现起来比较麻烦。后来就换了html,也不理想,最后就用QPainter直接绘制的,效果还不错,
Qt中操作Word并导出报表可以使用QAxObject类来实现。QAxObject是Qt对ActiveX对象的封装,可以用于与Microsoft Office应用程序进行交互。以下是一个简单的示例代码,演示如何使用Qt操作Word并导出报表:
cpp复制代码#include <QtWidgets>
#include <QAxObject>
void exportReportToWord(const QString& reportText, const QString& filePath) {
QAxObject* wordApplication=new QAxObject("Word.Application", nullptr);
wordApplication->setProperty("Visible", false); // 设置Word应用程序不可见
QAxObject* documents=wordApplication->querySubObject("Documents");
QAxObject* document=documents->querySubObject("Add()");
QAxObject* content=document->querySubObject("Content");
content->dynamicCall("SetText(const QString&)", reportText); // 将报表文本设置为Word文档内容
document->dynamicCall("SaveAs(const QString&)", filePath); // 保存Word文档到指定路径
document->dynamicCall("Close()"); // 关闭Word文档
wordApplication->dynamicCall("Quit()"); // 退出Word应用程序
delete wordApplication;
}
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 假设有一个报表文本
QString report="报告内容...";
// 导出报表到Word文件
exportReportToWord(report, "report.docx");
return app.exec();
}
在上述示例中,我们定义了一个exportReportToWord函数,该函数接收报表文本和导出路径作为参数。在函数内部,我们创建了一个Word应用程序对象,并将其设置为不可见(Visible属性设置为false)。
然后,我们使用Documents对象创建一个新的Word文档,并获取文档的Content对象。使用dynamicCall函数,我们通过SetText方法将报表文本设置为Word文档的内容。
接下来,使用dynamicCall的SaveAs方法将Word文档保存到指定的文件路径,并使用dynamicCall的Close方法关闭文档。最后,使用dynamicCall的Quit方法退出Word应用程序。
在main函数中,我们传递报表文本和导出路径,调用exportReportToWord函数来导出报表到Word文件。
请注意,上述示例仅为演示目的,实际应用中可能需要更复杂的操作,比如添加表格、设置样式等。你可以根据具体需求使用QAxObject的各种方法和属性进行操作。
*请认真填写需求信息,我们会在24小时内与您取得联系。