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小時內與您取得聯系。