Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)圖文混排
一、前言
除了能夠打印基本的文字信息數(shù)據(jù)到pdf和紙張,越來越多的應(yīng)用需求還要求能夠?qū)С鰣D片,并且要支持圖文混排,相當(dāng)于doc文檔類似,當(dāng)然也不會是太復(fù)雜的,類似于打印報(bào)表一樣,有表格形式的文字描述,也有對應(yīng)的圖片插入其中,圖文混排的應(yīng)用場景還真不少比如醫(yī)療行業(yè)輸出診斷結(jié)果往往都帶了圖片。于是針對這個(gè)需求特意開辟了新的類DataCreat專門生成報(bào)表的數(shù)據(jù),將生成好的數(shù)據(jù)體直接傳入給DataPrint類即可,如果有各種各樣的不同的圖文混排格式,可以直接在DataCreat類中生成好就行,默認(rèn)提供了一種圖文混排報(bào)表的模板,其他格式都按照這個(gè)格式來就行,建議做成結(jié)構(gòu)體的形式,比如提供的模板是無人機(jī)監(jiān)控系統(tǒng)告警報(bào)告。
無人機(jī)監(jiān)控系統(tǒng)告警報(bào)告結(jié)構(gòu)體參數(shù):
- 大標(biāo)題
- 副標(biāo)題
- 設(shè)備名稱
- 坐標(biāo)經(jīng)度值
- 坐標(biāo)緯度值
- 報(bào)警觸發(fā)時(shí)間
- 報(bào)告打印時(shí)間
- 警情類型
- 報(bào)警設(shè)備數(shù)量
- 報(bào)警級別
- 報(bào)警圖片集合
- 最后列拉伸填充
- 橫向排版
- 紙張邊距
二、功能特點(diǎn)
組件同時(shí)集成了導(dǎo)出數(shù)據(jù)到csv、xls、pdf和打印數(shù)據(jù)。
所有操作全部提供靜態(tài)方法無需new,數(shù)據(jù)和屬性等各種參數(shù)設(shè)置采用結(jié)構(gòu)體數(shù)據(jù),極為方便。
同時(shí)支持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等數(shù)據(jù)源。
提供靜態(tài)方法直接傳入QTableView、QTableWidget控件,自動識別列名、列寬和數(shù)據(jù)內(nèi)容。
每組功能都提供單獨(dú)的完整的示例,注釋詳細(xì),非常適合各階段Qter程序員。
原創(chuàng)導(dǎo)出數(shù)據(jù)機(jī)制,不依賴任何office組件或者操作系統(tǒng)等第三方庫,支持嵌入式linux。
速度超快,9個(gè)字段10萬行數(shù)據(jù)只需要2秒鐘完成。
只需要四個(gè)步驟即可開始急速導(dǎo)出海量數(shù)據(jù)比如100W條記錄到Excel。
同時(shí)提供直接寫入數(shù)據(jù)接口和多線程寫入數(shù)據(jù)接口,不卡主界面。
可設(shè)置標(biāo)題、副標(biāo)題、表名。
可設(shè)置導(dǎo)出數(shù)據(jù)的字段名、列名、列寬。
可設(shè)置末尾列自動拉伸填充,默認(rèn)拉伸更美觀。
可設(shè)置是否啟用校驗(yàn)過濾數(shù)據(jù),啟用后符合規(guī)則的數(shù)據(jù)特殊顏色顯示。
可指定校驗(yàn)的列、校驗(yàn)規(guī)則、校驗(yàn)值、校驗(yàn)值數(shù)據(jù)類型。
校驗(yàn)規(guī)則支持 精確等于==、大于>、大于等于>=、小于<、小于等于<=、不等于!=、包含contains。
校驗(yàn)值數(shù)據(jù)類型支持 整型int、浮點(diǎn)型float、雙精度型double,默認(rèn)文本字符串類型。
可設(shè)置隨機(jī)背景顏色及需要隨機(jī)背景色的列集合。
支持分組輸出數(shù)據(jù),比如按照設(shè)備分組輸出數(shù)據(jù),方便查看。
可設(shè)置csv分隔符、行內(nèi)容分隔符、子內(nèi)容分隔符。
可設(shè)置邊框?qū)挾?、自動填?shù)據(jù)類型,默認(rèn)自動數(shù)據(jù)類型開啟。
可設(shè)置是否開啟數(shù)據(jù)單元格樣式,默認(rèn)不開啟,不開啟可以節(jié)約大概30%的文件體積。
可設(shè)置橫向排版、紙張邊距等,比如導(dǎo)出到pdf以及打印數(shù)據(jù)。
支持圖文混排導(dǎo)出數(shù)據(jù)到pdf以及打印數(shù)據(jù),自動分頁。
靈活性超高,可自由更改源碼設(shè)置對齊方式、文字顏色、背景顏色等。
支持任意excel表格軟件,包括但不限于excel2003-2021、wps、openoffice等。
純Qt編寫,支持任意Qt版本+任意編譯器+任意系統(tǒng)。
三、體驗(yàn)地址
體驗(yàn)地址:https://pan.baidu.com/s/15ZKAlptW-rDcNq8zlzdYLg 提取碼:uyes 文件名:bin_dataout.zip
國內(nèi)站點(diǎn):https://gitee.com/feiyangqingyun
國際站點(diǎn):https://github.com/feiyangqingyun
四、效果圖
五、相關(guān)代碼
#include "datacreat.h" void DataCreat::creatUavsReportHead(QStringList &list, const UavsReportData &reportData) { //表格開始 list << "<table border='0.0' cellspacing='0' cellpadding='6'>"; //標(biāo)題 list << "<tr>"; list << QString("<td width='100%' align='center' style='font-size:22px;font-weight:bold;' colspan='%1'>%2</td>").arg(2).arg(reportData.title); list << "</tr>"; //橫線或者換行 list << "<hr>"; //list << "<br>"; //當(dāng)前模塊通用樣式 QString style = "style='font-size:18px;'"; //設(shè)備名稱 QString name = QString("設(shè)備名稱: %1").arg(reportData.name); list << "<tr>"; list << QString("<td colspan='%1' %2>%3</td>").arg(2).arg(style).arg(name); list << "</tr>"; //經(jīng)度緯度 QString lng = QString("設(shè)備經(jīng)度: %1").arg(reportData.lng); QString lat = QString("設(shè)備緯度: %1").arg(reportData.lat); list << "<tr>"; list << QString("<td %1>%2</td>").arg(style).arg(lng); list << QString("<td %1>%2</td>").arg(style).arg(lat); list << "</tr>"; //告警日期+報(bào)告時(shí)間 QString timeAlarm = QString("告警日期: %1").arg(reportData.timeAlarm); QString timeReport = QString("報(bào)告時(shí)間: %1").arg(reportData.timeReport); list << "<tr>"; list << QString("<td %1>%2</td>").arg(style).arg(timeAlarm); list << QString("<td %1>%2</td>").arg(style).arg(timeReport); list << "</tr>"; //表格結(jié)束 list << "</table>"; } void DataCreat::creatUavsReportBody(QStringList &list, const UavsReportData &reportData, int imageWidth) { //換行 list << "<br><br>"; //表格開始 list << "<table border='0.5' cellspacing='0' cellpadding='5'>"; //標(biāo)題 list << "<tr>"; list << QString("<td width='100%' align='center' style='font-size:20px;font-weight:bold;' colspan='%1'>%2</td>").arg(2).arg(reportData.subTitle); list << "</tr>"; //當(dāng)前模塊通用樣式 QString style = "style='font-size:18px;'"; //告警類型 QString type = QString("告警類型: %1").arg(reportData.type); list << "<tr>"; list << QString("<td width='100%' colspan='%1' %2>%3</td>").arg(2).arg(style).arg(type); list << "</tr>"; //目標(biāo)數(shù)量+威脅等級 QString textCount = QString("目標(biāo)數(shù)量: %1").arg(reportData.textCount); QString textLevel = QString("威脅等級: %1").arg(reportData.textLevel); list << "<tr>"; list << QString("<td %1>%2</td>").arg(style).arg(textCount); list << QString("<td %1>%2</td>").arg(style).arg(textLevel); list << "</tr>"; //圖像隊(duì)列 QStringList listImage = reportData.images; int count = listImage.count(); //告警圖像 QString text = QString("告警圖像 ( 共 %1 張 )").arg(count); list << "<tr>"; list << QString("<td width='100%' align='center' style='font-size:20px;font-weight:bold;' colspan='%1'>%2</td>").arg(2).arg(text); list << "</tr>"; //計(jì)算繪制區(qū)域大小,先將圖像縮放到合適大小并保存在本地 QString path = qApp->applicationDirPath() + "/snap/"; for (int i = 0; i < count; ++i) { QImage image(listImage.at(i)); if (image.width() > imageWidth) { QString name = path + QString("%1.jpg").arg(i + 1); image = image.scaled(imageWidth, image.height(), Qt::KeepAspectRatio, Qt::SmoothTransformation); image.save(name, "jpg"); listImage[i] = name; } } //qDebug() << listImage; //垂直居中 style = "style='vertical-align:middle;'"; for (int i = 0; i < count; i = i + 2) { list << "<tr>"; list << QString("<td align='center' %1><img src='%2'></td>").arg(style).arg(listImage.at(i)); //需要過濾判斷下,很可能是奇數(shù)會超過下一個(gè) if (i < count - 1) { list << QString("<td align='center' %1><img src='%2'></td>").arg(style).arg(listImage.at(i + 1)); } list << "</tr>"; } //表格結(jié)束 list << "</table>"; }
以上就是Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)圖文混排的詳細(xì)內(nèi)容,更多關(guān)于Qt數(shù)據(jù)圖文混排的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++構(gòu)造函數(shù)和析構(gòu)函數(shù)的使用與講解
今天小編就為大家分享一篇關(guān)于C++構(gòu)造函數(shù)和析構(gòu)函數(shù)的使用與講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12C++標(biāo)準(zhǔn)模版庫(STL)之vector容器詳解
vector的功能和水桶一樣,就是用來裝東西的,并且vector還提供了迭代器來很方便的訪問這些數(shù)據(jù),下面就讓我們一起看下如何使用C++的vector吧2023-03-03C++實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04C++字符數(shù)組、字符數(shù)組指針和string類
這篇文章主要介紹了C++字符數(shù)組、字符數(shù)組指針和string類,string是一個(gè)類而不是基本數(shù)據(jù)類型,數(shù)組不含有處理函數(shù),下面更多詳細(xì)內(nèi)容,需要的小伙伴可以參考下面文章2022-03-03