最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)圖文混排

 更新時(shí)間:2022年02月19日 11:00:14   作者:feiyangqingyun  
除了能夠打印基本的文字信息數(shù)據(jù)到pdf和紙張,越來(lái)越多的應(yīng)用需求還要求能夠?qū)С鰣D片,并且要支持圖文混排。本文將通過(guò)Qt實(shí)現(xiàn)這一功能,需要的可以參考一下

一、前言

除了能夠打印基本的文字信息數(shù)據(jù)到pdf和紙張,越來(lái)越多的應(yīng)用需求還要求能夠?qū)С鰣D片,并且要支持圖文混排,相當(dāng)于doc文檔類似,當(dāng)然也不會(huì)是太復(fù)雜的,類似于打印報(bào)表一樣,有表格形式的文字描述,也有對(duì)應(yīng)的圖片插入其中,圖文混排的應(yīng)用場(chǎng)景還真不少比如醫(yī)療行業(yè)輸出診斷結(jié)果往往都帶了圖片。于是針對(duì)這個(gè)需求特意開(kāi)辟了新的類DataCreat專門生成報(bào)表的數(shù)據(jù),將生成好的數(shù)據(jù)體直接傳入給DataPrint類即可,如果有各種各樣的不同的圖文混排格式,可以直接在DataCreat類中生成好就行,默認(rèn)提供了一種圖文混排報(bào)表的模板,其他格式都按照這個(gè)格式來(lái)就行,建議做成結(jié)構(gòu)體的形式,比如提供的模板是無(wú)人機(jī)監(jiān)控系統(tǒng)告警報(bào)告。

無(wú)人機(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)警級(jí)別
  • 報(bào)警圖片集合
  • 最后列拉伸填充
  • 橫向排版
  • 紙張邊距

二、功能特點(diǎn)

組件同時(shí)集成了導(dǎo)出數(shù)據(jù)到csv、xls、pdf和打印數(shù)據(jù)。

所有操作全部提供靜態(tài)方法無(wú)需new,數(shù)據(jù)和屬性等各種參數(shù)設(shè)置采用結(jié)構(gòu)體數(shù)據(jù),極為方便。

同時(shí)支持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等數(shù)據(jù)源。

提供靜態(tài)方法直接傳入QTableView、QTableWidget控件,自動(dòng)識(shí)別列名、列寬和數(shù)據(jù)內(nèi)容。

每組功能都提供單獨(dú)的完整的示例,注釋詳細(xì),非常適合各階段Qter程序員。

原創(chuàng)導(dǎo)出數(shù)據(jù)機(jī)制,不依賴任何office組件或者操作系統(tǒng)等第三方庫(kù),支持嵌入式linux。

速度超快,9個(gè)字段10萬(wàn)行數(shù)據(jù)只需要2秒鐘完成。

只需要四個(gè)步驟即可開(kāi)始急速導(dǎo)出海量數(shù)據(jù)比如100W條記錄到Excel。

同時(shí)提供直接寫入數(shù)據(jù)接口和多線程寫入數(shù)據(jù)接口,不卡主界面。

可設(shè)置標(biāo)題、副標(biāo)題、表名。

可設(shè)置導(dǎo)出數(shù)據(jù)的字段名、列名、列寬。

可設(shè)置末尾列自動(dòng)拉伸填充,默認(rèn)拉伸更美觀。

可設(shè)置是否啟用校驗(yàn)過(guò)濾數(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ū)挾?、自?dòng)填數(shù)據(jù)類型,默認(rèn)自動(dòng)數(shù)據(jù)類型開(kāi)啟。

可設(shè)置是否開(kāi)啟數(shù)據(jù)單元格樣式,默認(rèn)不開(kāi)啟,不開(kāi)啟可以節(jié)約大概30%的文件體積。

可設(shè)置橫向排版、紙張邊距等,比如導(dǎo)出到pdf以及打印數(shù)據(jù)。

支持圖文混排導(dǎo)出數(shù)據(jù)到pdf以及打印數(shù)據(jù),自動(dòng)分頁(yè)。

靈活性超高,可自由更改源碼設(shè)置對(duì)齊方式、文字顏色、背景顏色等。

支持任意excel表格軟件,包括但不限于excel2003-2021、wps、openoffice等。

純Qt編寫,支持任意Qt版本+任意編譯器+任意系統(tǒng)。

三、體驗(yàn)地址

體驗(yàn)地址:https://pan.baidu.com/s/15ZKAlptW-rDcNq8zlzdYLg  提取碼:uyes 文件名:bin_dataout.zip

國(guó)內(nèi)站點(diǎn):https://gitee.com/feiyangqingyun

國(guó)際站點(diǎn):https://github.com/feiyangqingyun

四、效果圖

五、相關(guān)代碼

#include "datacreat.h"

void DataCreat::creatUavsReportHead(QStringList &list, const UavsReportData &reportData)
{
    //表格開(kāi)始
    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>";

    //表格開(kāi)始
    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ù)量+威脅等級(jí)
    QString textCount = QString("目標(biāo)數(shù)量: %1").arg(reportData.textCount);
    QString textLevel = QString("威脅等級(jí): %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));
        //需要過(guò)濾判斷下,很可能是奇數(shù)會(huì)超過(guò)下一個(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ù)庫(kù)應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)圖文混排的詳細(xì)內(nèi)容,更多關(guān)于Qt數(shù)據(jù)圖文混排的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 主流操作系統(tǒng)平臺(tái)的宏定義

    主流操作系統(tǒng)平臺(tái)的宏定義

    這篇文章主要介紹了主流操作系統(tǒng)平臺(tái)的宏定義,最近正在學(xué)習(xí)C++程序從Windows 平臺(tái)向Unix 平臺(tái)移植,參考了 qt 的宏定義文件,需要的朋友可以參考下
    2014-02-02
  • 在C語(yǔ)言中轉(zhuǎn)換時(shí)間的基本方法介紹

    在C語(yǔ)言中轉(zhuǎn)換時(shí)間的基本方法介紹

    這篇文章主要介紹了在C語(yǔ)言中轉(zhuǎn)換時(shí)間的基本方法,分別是mktime()函數(shù)和localtime()函數(shù)的使用,需要的朋友可以參考下
    2015-08-08
  • 基于C語(yǔ)言實(shí)現(xiàn)UDP服務(wù)器

    基于C語(yǔ)言實(shí)現(xiàn)UDP服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了如何使用C語(yǔ)言編寫一個(gè)簡(jiǎn)單的UDP服務(wù)器程序,以及如何接收和處理客戶端發(fā)送的數(shù)據(jù),有需要的小伙伴可以了解下
    2024-10-10
  • C++利用LuaIntf調(diào)用Lua的方法示例

    C++利用LuaIntf調(diào)用Lua的方法示例

    這篇文章主要給大家介紹了關(guān)于C++利用LuaIntf調(diào)用Lua以及利用lua-intf來(lái)調(diào)用C++函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-11-11
  • C++ Vector用法深入剖析

    C++ Vector用法深入剖析

    C++ Vector應(yīng)用方式是比較特殊的,我們將會(huì)在這篇文章中針對(duì)于它的應(yīng)用方式進(jìn)行一個(gè)詳細(xì)的介紹,希望大家能充分掌握這一應(yīng)用技巧
    2014-08-08
  • C語(yǔ)言動(dòng)態(tài)規(guī)劃多種背包問(wèn)題分析講解

    C語(yǔ)言動(dòng)態(tài)規(guī)劃多種背包問(wèn)題分析講解

    背包問(wèn)題(Knapsack problem)是一種組合優(yōu)化的NP完全問(wèn)題。問(wèn)題可以描述為:給定一組物品,每種物品都有自己的重量和價(jià)格,在限定的總重量?jī)?nèi),我們?nèi)绾芜x擇,才能使得物品的總價(jià)格最高
    2022-04-04
  • C++第三方日志庫(kù)Glog的安裝與使用介紹

    C++第三方日志庫(kù)Glog的安裝與使用介紹

    這篇文章主要介紹了C++第三方日志庫(kù)Glog的安裝與使用介紹,本文配置所采用的環(huán)境為Visual?Studio2017,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • 為什么說(shuō)C語(yǔ)言是永不過(guò)時(shí)的語(yǔ)言

    為什么說(shuō)C語(yǔ)言是永不過(guò)時(shí)的語(yǔ)言

    時(shí)隔5年,C語(yǔ)言再次領(lǐng)先Java,榮登TIOBE編程語(yǔ)言排行榜第一,那么C語(yǔ)言為何不會(huì)過(guò)時(shí)?你需要掌握多少種語(yǔ)言呢,感興趣的朋友通過(guò)本文一起學(xué)習(xí)下吧
    2020-11-11
  • C語(yǔ)言的指針類型詳細(xì)解析

    C語(yǔ)言的指針類型詳細(xì)解析

    C語(yǔ)言的指針類型包括兩方面的信息:一是地址,存放在指針變量中;二是類型信息,關(guān)乎于讀寫的長(zhǎng)度,沒(méi)有存儲(chǔ)在指針變量中,位于用該指針讀寫時(shí)的mov指令中,不同的讀寫長(zhǎng)度對(duì)應(yīng)的mov指令不同
    2013-09-09
  • C++實(shí)現(xiàn)圖的鄰接表存儲(chǔ)和廣度優(yōu)先遍歷實(shí)例分析

    C++實(shí)現(xiàn)圖的鄰接表存儲(chǔ)和廣度優(yōu)先遍歷實(shí)例分析

    這篇文章主要介紹了C++實(shí)現(xiàn)圖的鄰接表存儲(chǔ)和廣度優(yōu)先遍歷,實(shí)例分析了C++實(shí)現(xiàn)圖的存儲(chǔ)與遍歷技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

阿巴嘎旗| 台东县| 盐源县| 江口县| 广昌县| 任丘市| 宁津县| 阿勒泰市| 泸定县| 昌吉市| 乐安县| 滕州市| 岐山县| 水富县| 宜州市| 乐安县| 绥化市| 大丰市| 嘉义市| 武鸣县| 万全县| 定兴县| 新田县| 深泽县| 宜章县| 始兴县| 南漳县| 蒙城县| 会东县| 神农架林区| 福泉市| 新乡县| 涿鹿县| 绥阳县| 淮安市| 家居| 阆中市| 南宁市| 西青区| 贵州省| 汾西县|