Qt將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出為html
更新時間:2024年12月27日 11:09:38 作者:小灰灰搞電子
這篇文章主要為大家詳細(xì)介紹了Qt如何實(shí)現(xiàn)將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出為html,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(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)文章
C++ OpenCV實(shí)現(xiàn)銀行卡號識別功能
這篇文章主要介紹了如何使用OpenCV C++實(shí)現(xiàn)銀行卡號識別功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)OpenCV有一定幫助,需要的可以參考一下2022-01-01
C++原地刪除有序數(shù)組重復(fù)項(xiàng)的N種方法
給定一個排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個元素只出現(xiàn)一次,返回移除后數(shù)組的新長度,不要使用額外的數(shù)組空間,你必須在 原地 修改輸入數(shù)組 并在使用O(1)額外空間的條件下完成,故本文介紹了C++原地刪除有序數(shù)組重復(fù)項(xiàng)的N種方法,需要的朋友可以參考下2025-03-03
C++緩存線程池CachedThreadPool原理、實(shí)現(xiàn)與對比解析
在C++中實(shí)現(xiàn)一個緩存線程池(CachedThreadPool)是一種常用的并發(fā)編程模式,特別是在需要處理大量短生命周期任務(wù)的場景中,本文給大家介紹C++?緩存線程池(CachedThreadPool)原理、實(shí)現(xiàn)、對比分析,感興趣的朋友跟隨小編一起看看吧2026-05-05

