Qt將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出為html
一、源碼分享
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("文件打開(kāi)失??!"); 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; //開(kāi)始設(shè)置表頭 cmd =QString("select * from %1").arg(tableName); sqlQuery.prepare(cmd); if(!sqlQuery.exec()) { errString = tr("數(shù)據(jù)庫(kù)表頭獲取失?。?); occerError = true; goto exit; } record = sqlQuery.record(); col = record.count(); //獲取列數(shù) //qDebug()<<"col:"<<col; //寫(xiě)入表頭 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ù)庫(kù)行數(shù)獲取失?。?); occerError = true; goto exit; } sqlQuery.next(); row = sqlQuery.value(0).toInt(); //開(kāi)始導(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ù)庫(kù)數(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"; //文本對(duì)齊 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ù)庫(kù)中的數(shù)據(jù)導(dǎo)出為html的文章就介紹到這了,更多相關(guān)Qt數(shù)據(jù)庫(kù)數(shù)據(jù)導(dǎo)出為html內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決vscode下調(diào)試c/c++程序一閃而過(guò)的問(wèn)題(Windows)
這篇文章主要介紹了解決vscode下調(diào)試c/c++程序一閃而過(guò)(Windows),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08基于c++11的event-driven library的理解
這篇文章主要介紹了基于c++11的event-driven library的理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02如何基于 Blueprint 在游戲中創(chuàng)建實(shí)時(shí)音視頻功能
我們?cè)诒疚南葋?lái)講講如何在 Unreal 中用 Blueprint 快速實(shí)現(xiàn)。稍后會(huì)分享基于 C++的實(shí)現(xiàn)步驟。感興趣的朋友跟隨小編一起看看吧2020-05-05C/C++實(shí)現(xiàn)通訊錄管理系統(tǒng)(附源碼)
這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-12-12C語(yǔ)言之實(shí)現(xiàn)控制臺(tái)光標(biāo)隨意移動(dòng)的實(shí)例代碼
下面小編就為大家?guī)?lái)一篇C語(yǔ)言之實(shí)現(xiàn)控制臺(tái)光標(biāo)隨意移動(dòng)的實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07C++ 實(shí)現(xiàn)對(duì)象池的具體方法
本文主要介紹了C++ 實(shí)現(xiàn)對(duì)象池的具體方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01C++實(shí)現(xiàn)神經(jīng)BP神經(jīng)網(wǎng)絡(luò)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)神經(jīng)BP神經(jīng)網(wǎng)絡(luò),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05用C++面向?qū)ο蟮姆绞絼?dòng)態(tài)加載so的方法
下面小編就為大家?guī)?lái)一篇用C++面向?qū)ο蟮姆绞絼?dòng)態(tài)加載so的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12