Qt將數(shù)據(jù)庫中的數(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("文件打開失?。?);
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)文章
解決vscode下調(diào)試c/c++程序一閃而過的問題(Windows)
這篇文章主要介紹了解決vscode下調(diào)試c/c++程序一閃而過(Windows),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
基于c++11的event-driven library的理解
這篇文章主要介紹了基于c++11的event-driven library的理解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
如何基于 Blueprint 在游戲中創(chuàng)建實時音視頻功能
我們在本文先來講講如何在 Unreal 中用 Blueprint 快速實現(xiàn)。稍后會分享基于 C++的實現(xiàn)步驟。感興趣的朋友跟隨小編一起看看吧2020-05-05
C/C++實現(xiàn)通訊錄管理系統(tǒng)(附源碼)
這篇文章主要為大家詳細(xì)介紹了如何利用C++實現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-12-12
C語言之實現(xiàn)控制臺光標(biāo)隨意移動的實例代碼
下面小編就為大家?guī)硪黄狢語言之實現(xiàn)控制臺光標(biāo)隨意移動的實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-07
C++實現(xiàn)神經(jīng)BP神經(jīng)網(wǎng)絡(luò)
這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)神經(jīng)BP神經(jīng)網(wǎng)絡(luò),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-05-05

