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

Qt將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出為html

 更新時間:2024年12月27日 11:09:38   作者:小灰灰搞電子  
這篇文章主要為大家詳細介紹了Qt如何實現(xiàn)將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出為html,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、源碼分享

bool ReportFormUtils::exportReportHtml(QString &errString, const QString tableName, const QString savePathAndName, const QString tableTitle, const QString tableInfo)
{
    Q_UNUSED(errString)
    Q_UNUSED(tableName)
    Q_UNUSED(savePathAndName)

#define SINGLE_OPT_ROW 1000
    QString cmd;
    quint32 i,j;
    quint32 row,col;
    bool occerError = false;
    QString fileWriteContent;

    //判斷文件是否存在
    QFile file(savePathAndName);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        errString = tr("文件打開失??!");
        return false;
    }
    QTextStream out(&file);


    out << QString("<!DOCTYPE html>") << Qt::endl;
    out << QString("<html>") << Qt::endl;
    out << QString("<head>") << Qt::endl;
    out << QString("<meta charset=\"utf-8\">") << Qt::endl;
    out << QString("<title>");
    out << tableTitle << QString("</title>") << Qt::endl;
    out << QString("</head>") << Qt::endl;
    out << QString("<body>") << Qt::endl;
    out << QString(tableInfo) << Qt::endl;
    out << QString("<table border=\"1\">") << Qt::endl;


    SqliteHelper* sqlHelper = SqliteHelper::getInstance();
    QSqlDatabase *db = sqlHelper->getDatabase();

    QSqlQuery sqlQuery(*db);
    QSqlRecord record;
    //開始設(shè)置表頭
    cmd =QString("select * from %1").arg(tableName);
    sqlQuery.prepare(cmd);
    if(!sqlQuery.exec())
    {
        errString = tr("數(shù)據(jù)庫表頭獲取失??!");
        occerError = true;
        goto exit;
    }
    record = sqlQuery.record();
    col = record.count();      //獲取列數(shù)
    //qDebug()<<"col:"<<col;
    //寫入表頭
    out << QString("<tr>") << Qt::endl;
    for(i=0;i<col;++i)
    {
        out << formatCell(record.fieldName(i)) << Qt::endl;
    }
    out << QString("</tr>") << Qt::endl;


    //獲取數(shù)據(jù)行數(shù)
    cmd =QString("SELECT count(*) FROM %1;").arg(tableName);
    sqlQuery.prepare(cmd);
    if(!sqlQuery.exec())
    {
        errString = tr("數(shù)據(jù)庫行數(shù)獲取失??!");
        occerError = true;
        goto exit;
    }
    sqlQuery.next();
    row = sqlQuery.value(0).toInt();

    //開始導(dǎo)出數(shù)據(jù)
    for(i =0;i < row; i+=SINGLE_OPT_ROW)
    {
        sqlQuery.clear();
        cmd =QString("select * from %1 limit %2,%3").arg(tableName).arg(i).arg(SINGLE_OPT_ROW);
        //qDebug()<<cmd;
        sqlQuery.prepare(cmd);
        if(!sqlQuery.exec())
        {
            errString = tr("數(shù)據(jù)庫數(shù)據(jù)獲取失敗!");
            occerError = true;
            goto exit;
        }
        //讀取數(shù)據(jù)
        while(sqlQuery.next())
        {
            out << QString("<tr>") << Qt::endl;
            for(j=0;j<col;j++)
            {
                out << formatCell(sqlQuery.value(j).toString()) << Qt::endl;
            }
            out << QString("</tr>") << Qt::endl;
        }
    }
    out << QString("</table>") << Qt::endl;
    out << QString("</body>") << Qt::endl;
    out << QString("</html>") <<Qt::endl;
    qDebug()<<"currentThreadId = "<<QThread::currentThreadId();
exit:
    file.close();
    db->close();
    delete db;
    if(occerError)
        return false;

    return true;
}

void ReportFormUtils::castListListVariant2Variant(const QList<QList<QVariant> > &cells, QVariant &res)
{
    QVariantList vars;
    const int rows = cells.size();
    for(int i=0;i<rows;++i)
    {
        vars.append(QVariant(cells[i]));
    }
    res = QVariant(vars);
}

QString ReportFormUtils::formatCell(QString val)
{
    QString outStr = "<td";

    //文本對齊
    outStr += " align=\"";
    outStr += "center";
    outStr += "\"";

    //跨列
    outStr += QString::asprintf(" colspan=\"%d\"", 1);

    //跨行
    outStr += QString::asprintf(" rowspan=\"%d\"", 1);

    //背景色 bgcolor
    outStr += QString::asprintf(" bgcolor=\"#%x\"", 0xcce8cf);

    outStr += ">";

    //內(nèi)容
    if (val.size()) {
        outStr += val;
    }

    outStr += "</td>";
    return outStr;
}

二、導(dǎo)出文件查看

三、瀏覽器查看

到此這篇關(guān)于Qt將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出為html的文章就介紹到這了,更多相關(guān)Qt數(shù)據(jù)庫數(shù)據(jù)導(dǎo)出為html內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Matlab繪制地圖的超詳細教程

    利用Matlab繪制地圖的超詳細教程

    worldmap和usamap是axesm的子類,worldmap是用于生成世界地圖坐標區(qū)域,usamap用于生成美國地圖坐標區(qū)域。本文將詳細為大家介紹如何利用這兩個函數(shù)繪制地圖,需要的可以參考一下
    2022-02-02
  • C++ OpenCV實現(xiàn)銀行卡號識別功能

    C++ OpenCV實現(xiàn)銀行卡號識別功能

    這篇文章主要介紹了如何使用OpenCV C++實現(xiàn)銀行卡號識別功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)OpenCV有一定幫助,需要的可以參考一下
    2022-01-01
  • 將字符串str1復(fù)制為字符串str2的三種解決方法

    將字符串str1復(fù)制為字符串str2的三種解決方法

    以下是對將字符串str1復(fù)制為字符串str2的三種解決方法進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C++原地刪除有序數(shù)組重復(fù)項的N種方法

    C++原地刪除有序數(shù)組重復(fù)項的N種方法

    給定一個排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個元素只出現(xiàn)一次,返回移除后數(shù)組的新長度,不要使用額外的數(shù)組空間,你必須在 原地 修改輸入數(shù)組 并在使用O(1)額外空間的條件下完成,故本文介紹了C++原地刪除有序數(shù)組重復(fù)項的N種方法,需要的朋友可以參考下
    2025-03-03
  • C語言實現(xiàn)簡易版掃雷小游戲

    C語言實現(xiàn)簡易版掃雷小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易版掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C/C++常用函數(shù)易錯點分析

    C/C++常用函數(shù)易錯點分析

    這篇文章主要介紹了C/C++常用函數(shù)易錯點分析,包含了memset、sizeof、getchar三個常用函數(shù)的分析,需要的朋友可以參考下
    2014-08-08
  • C++ 自定義控件的移植問題

    C++ 自定義控件的移植問題

    這篇文章主要介紹了C++ 自定義控件的移植問題,十分的簡單實用,有需要的小伙伴可以參考下。
    2015-06-06
  • C語言中qsort函數(shù)的用法實例詳解

    C語言中qsort函數(shù)的用法實例詳解

    這篇文章主要介紹了C語言中qsort函數(shù)的用法實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C++緩存線程池CachedThreadPool原理、實現(xiàn)與對比解析

    C++緩存線程池CachedThreadPool原理、實現(xiàn)與對比解析

    在C++中實現(xiàn)一個緩存線程池(CachedThreadPool)是一種常用的并發(fā)編程模式,特別是在需要處理大量短生命周期任務(wù)的場景中,本文給大家介紹C++?緩存線程池(CachedThreadPool)原理、實現(xiàn)、對比分析,感興趣的朋友跟隨小編一起看看吧
    2026-05-05
  • C語言直接選擇排序算法詳解

    C語言直接選擇排序算法詳解

    直接選擇排序就是遍歷整個數(shù)組,每遍歷一遍的目的是找出該數(shù)組中的最大數(shù)和最小數(shù)對應(yīng)的下標,然后將最小數(shù)和數(shù)組的第一個數(shù)進行交換,最大數(shù)和數(shù)組的最后一個數(shù)進行交換,然后縮小范圍再次遍歷
    2022-08-08

最新評論

西乌| 泾川县| 吉林市| 开江县| 山阴县| 泸溪县| 文安县| 五大连池市| 关岭| 新昌县| 罗甸县| 石泉县| 萍乡市| 乐平市| 芜湖县| 海淀区| 泽普县| 札达县| 华阴市| 西平县| 绥江县| 曲阜市| 马关县| 福安市| 大名县| 沽源县| 金堂县| 潍坊市| 油尖旺区| 兰溪市| 金平| 石柱| 阿克苏市| 台湾省| 安溪县| 峨边| 浦城县| 龙陵县| 仙游县| 上林县| 汉源县|