欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、前言

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

無人機監(jiān)控系統(tǒng)告警報告結構體參數(shù):

  • 大標題
  • 副標題
  • 設備名稱
  • 坐標經(jīng)度值
  • 坐標緯度值
  • 報警觸發(fā)時間
  • 報告打印時間
  • 警情類型
  • 報警設備數(shù)量
  • 報警級別
  • 報警圖片集合
  • 最后列拉伸填充
  • 橫向排版
  • 紙張邊距

二、功能特點

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

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

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

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

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

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

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

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

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

可設置標題、副標題、表名。

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

可設置末尾列自動拉伸填充,默認拉伸更美觀。

可設置是否啟用校驗過濾數(shù)據(jù),啟用后符合規(guī)則的數(shù)據(jù)特殊顏色顯示。

可指定校驗的列、校驗規(guī)則、校驗值、校驗值數(shù)據(jù)類型。

校驗規(guī)則支持 精確等于==、大于>、大于等于>=、小于<、小于等于<=、不等于!=、包含contains。

校驗值數(shù)據(jù)類型支持 整型int、浮點型float、雙精度型double,默認文本字符串類型。

可設置隨機背景顏色及需要隨機背景色的列集合。

支持分組輸出數(shù)據(jù),比如按照設備分組輸出數(shù)據(jù),方便查看。

可設置csv分隔符、行內(nèi)容分隔符、子內(nèi)容分隔符。

可設置邊框寬度、自動填數(shù)據(jù)類型,默認自動數(shù)據(jù)類型開啟。

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

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

支持圖文混排導出數(shù)據(jù)到pdf以及打印數(shù)據(jù),自動分頁。

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

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

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

三、體驗地址

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

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

國際站點:https://github.com/feiyangqingyun

四、效果圖

五、相關代碼

#include "datacreat.h"

void DataCreat::creatUavsReportHead(QStringList &list, const UavsReportData &reportData)
{
    //表格開始
    list << "<table border='0.0' cellspacing='0' cellpadding='6'>";

    //標題
    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>";

    //當前模塊通用樣式
    QString style = "style='font-size:18px;'";

    //設備名稱
    QString name = QString("設備名稱: %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("設備經(jīng)度: %1").arg(reportData.lng);
    QString lat = QString("設備緯度: %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>";

    //告警日期+報告時間
    QString timeAlarm = QString("告警日期: %1").arg(reportData.timeAlarm);
    QString timeReport = QString("報告時間: %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>";

    //表格結束
    list << "</table>";
}

void DataCreat::creatUavsReportBody(QStringList &list, const UavsReportData &reportData, int imageWidth)
{
    //換行
    list << "<br><br>";

    //表格開始
    list << "<table border='0.5' cellspacing='0' cellpadding='5'>";

    //標題
    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>";

    //當前模塊通用樣式
    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>";

    //目標數(shù)量+威脅等級
    QString textCount = QString("目標數(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>";

    //圖像隊列
    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>";

    //計算繪制區(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ù)會超過下一個
        if (i < count - 1) {
            list << QString("<td align='center' %1><img src='%2'></td>").arg(style).arg(listImage.at(i + 1));
        }
        list << "</tr>";
    }

    //表格結束
    list << "</table>";
}

以上就是Qt數(shù)據(jù)庫應用之實現(xiàn)數(shù)據(jù)圖文混排的詳細內(nèi)容,更多關于Qt數(shù)據(jù)圖文混排的資料請關注腳本之家其它相關文章!

相關文章

  • C++ 匈牙利算法案例分析詳解

    C++ 匈牙利算法案例分析詳解

    這篇文章主要介紹了C++ 匈牙利算法案例分析詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++中純虛函數(shù)的實例詳解

    C++中純虛函數(shù)的實例詳解

    純虛函數(shù)就是一個在基類中的虛函數(shù),差別只是在一般的虛函數(shù)聲明的后面加了“=0”,下面這篇文章主要給大家介紹了關于C++中純虛函數(shù)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • C++構造函數(shù)和析構函數(shù)的使用與講解

    C++構造函數(shù)和析構函數(shù)的使用與講解

    今天小編就為大家分享一篇關于C++構造函數(shù)和析構函數(shù)的使用與講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C++中運算符重載詳解及其作用介紹

    C++中運算符重載詳解及其作用介紹

    這篇文章主要介紹了C++中運算符重載詳解及其作用介紹,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C++中vector與remove()函數(shù)詳解

    C++中vector與remove()函數(shù)詳解

    這篇文章主要介紹了C++中vector與remove()函數(shù),本文實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • C++標準模版庫(STL)之vector容器詳解

    C++標準模版庫(STL)之vector容器詳解

    vector的功能和水桶一樣,就是用來裝東西的,并且vector還提供了迭代器來很方便的訪問這些數(shù)據(jù),下面就讓我們一起看下如何使用C++的vector吧
    2023-03-03
  • C++實現(xiàn)中綴表達式轉后綴表達式

    C++實現(xiàn)中綴表達式轉后綴表達式

    這篇文章主要為大家詳細介紹了C++實現(xiàn)中綴表達式轉后綴表達式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++ vector的基本使用示例詳解

    C++ vector的基本使用示例詳解

    這篇文章主要介紹了C++ vector的基本使用,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • C/C++線程退出的四種方法小結

    C/C++線程退出的四種方法小結

    本文主要介紹了C/C++線程退出的四種方法小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • C++字符數(shù)組、字符數(shù)組指針和string類

    C++字符數(shù)組、字符數(shù)組指針和string類

    這篇文章主要介紹了C++字符數(shù)組、字符數(shù)組指針和string類,string是一個類而不是基本數(shù)據(jù)類型,數(shù)組不含有處理函數(shù),下面更多詳細內(nèi)容,需要的小伙伴可以參考下面文章
    2022-03-03

最新評論