Qt将数据库中的数据导出为html

 更新时间:2024年12月27日 11:09:38   作者:小灰灰搞电子  
这篇文章主要为大家详细介绍了Qt如何实现将数据库中的数据导出为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;
    //开始设置表头
    cmd =QString("select * from %1").arg(tableName);
    sqlQuery.prepare(cmd);
    if(!sqlQuery.exec())
    {
        errString = tr("数据库表头获取失败!");
        occerError = true;
        goto exit;
    }
    record = sqlQuery.record();
    col = record.count();      //获取列数
    //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;


    //获取数据行数
    cmd =QString("SELECT count(*) FROM %1;").arg(tableName);
    sqlQuery.prepare(cmd);
    if(!sqlQuery.exec())
    {
        errString = tr("数据库行数获取失败!");
        occerError = true;
        goto exit;
    }
    sqlQuery.next();
    row = sqlQuery.value(0).toInt();

    //开始导出数据
    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("数据库数据获取失败!");
            occerError = true;
            goto exit;
        }
        //读取数据
        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 += ">";

    //内容
    if (val.size()) {
        outStr += val;
    }

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

二、导出文件查看

三、浏览器查看

到此这篇关于Qt将数据库中的数据导出为html的文章就介绍到这了,更多相关Qt数据库数据导出为html内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Matlab绘制地图的超详细教程

    利用Matlab绘制地图的超详细教程

    worldmap和usamap是axesm的子类,worldmap是用于生成世界地图坐标区域,usamap用于生成美国地图坐标区域。本文将详细为大家介绍如何利用这两个函数绘制地图,需要的可以参考一下
    2022-02-02
  • C++ OpenCV实现银行卡号识别功能

    C++ OpenCV实现银行卡号识别功能

    这篇文章主要介绍了如何使用OpenCV C++实现银行卡号识别功能,文中的示例代码讲解详细,对我们学习OpenCV有一定帮助,需要的可以参考一下
    2022-01-01
  • 将字符串str1复制为字符串str2的三种解决方法

    将字符串str1复制为字符串str2的三种解决方法

    以下是对将字符串str1复制为字符串str2的三种解决方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • C++原地删除有序数组重复项的N种方法

    C++原地删除有序数组重复项的N种方法

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用O(1)额外空间的条件下完成,故本文介绍了C++原地删除有序数组重复项的N种方法,需要的朋友可以参考下
    2025-03-03
  • C语言实现简易版扫雷小游戏

    C语言实现简易版扫雷小游戏

    这篇文章主要为大家详细介绍了C语言实现简易版扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • C/C++常用函数易错点分析

    C/C++常用函数易错点分析

    这篇文章主要介绍了C/C++常用函数易错点分析,包含了memset、sizeof、getchar三个常用函数的分析,需要的朋友可以参考下
    2014-08-08
  • C++ 自定义控件的移植问题

    C++ 自定义控件的移植问题

    这篇文章主要介绍了C++ 自定义控件的移植问题,十分的简单实用,有需要的小伙伴可以参考下。
    2015-06-06
  • C语言中qsort函数的用法实例详解

    C语言中qsort函数的用法实例详解

    这篇文章主要介绍了C语言中qsort函数的用法实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • C++缓存线程池CachedThreadPool原理、实现与对比解析

    C++缓存线程池CachedThreadPool原理、实现与对比解析

    在C++中实现一个缓存线程池(CachedThreadPool)是一种常用的并发编程模式,特别是在需要处理大量短生命周期任务的场景中,本文给大家介绍C++ 缓存线程池(CachedThreadPool)原理、实现、对比分析,感兴趣的朋友跟随小编一起看看吧
    2026-05-05
  • C语言直接选择排序算法详解

    C语言直接选择排序算法详解

    直接选择排序就是遍历整个数组,每遍历一遍的目的是找出该数组中的最大数和最小数对应的下标,然后将最小数和数组的第一个数进行交换,最大数和数组的最后一个数进行交换,然后缩小范围再次遍历
    2022-08-08

最新评论