上一篇
📢 最新动态(2025年8月)
Qt 6.6 版本近期优化了数据库模块的性能,特别是在大数据量导出时的内存管理,现在处理百万级记录更流畅!如果你还在用旧版本,可以考虑升级啦~
无论是生成报表、备份数据,还是迁移到其他系统,数据导出都是开发中常见的需求,Qt 提供了强大的数据库支持,配合简单的代码,就能轻松实现 CSV、Excel、JSON 等格式的导出。
我们就手把手教你用 Qt 实现数据库数据导出,代码简洁,包学包会!
假设你已经配置好数据库(SQLite、MySQL 或 PostgreSQL),首先确保能正常连接:
#include <QSqlDatabase> #include <QSqlQuery> #include <QDebug> // 连接SQLite数据库示例 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("mydatabase.db"); if (!db.open()) { qDebug() << "数据库连接失败:" << db.lastError().text(); return; }
CSV(逗号分隔值)是最通用的格式之一,用 Qt 的 QFile
和文本流就能搞定:
#include <QFile> #include <QTextStream> void exportToCSV(const QString &filename) { QFile file(filename); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { qDebug() << "无法创建文件:" << filename; return; } QTextStream out(&file); QSqlQuery query("SELECT * FROM employees"); // 替换为你的表名 // 写入表头 for (int i = 0; i < query.record().count(); ++i) { out << query.record().fieldName(i); if (i < query.record().count() - 1) out << ","; } out << "\n"; // 写入数据 while (query.next()) { for (int i = 0; i < query.record().count(); ++i) { out << query.value(i).toString(); if (i < query.record().count() - 1) out << ","; } out << "\n"; } file.close(); qDebug() << "数据已导出到:" << filename; }
调用示例:
exportToCSV("employees_export.csv");
虽然 Qt 不直接支持 Excel 格式,但可以通过开源库 QXlsx(需手动集成)实现:
#include "xlsxdocument.h" void exportToExcel(const QString &filename) { QXlsx::Document xlsx; QSqlQuery query("SELECT * FROM employees"); // 写入表头 for (int col = 0; col < query.record().count(); ++col) { xlsx.write(1, col + 1, query.record().fieldName(col)); } // 写入数据 int row = 2; while (query.next()) { for (int col = 0; col < query.record().count(); ++col) { xlsx.write(row, col + 1, query.value(col).toString()); } row++; } if (xlsx.saveAs(filename)) { qDebug() << "Excel 文件已生成:" << filename; } else { qDebug() << "导出失败!"; } }
JSON 适合结构化数据交换,Qt 的 QJsonDocument
能轻松处理:
#include <QJsonDocument> #include <QJsonArray> #include <QJsonObject> void exportToJSON(const QString &filename) { QJsonArray jsonArray; QSqlQuery query("SELECT * FROM employees"); while (query.next()) { QJsonObject recordObject; for (int i = 0; i < query.record().count(); ++i) { recordObject.insert( query.record().fieldName(i), QJsonValue::fromVariant(query.value(i)) ); } jsonArray.append(recordObject); } QFile file(filename); if (file.open(QIODevice::WriteOnly)) { file.write(QJsonDocument(jsonArray).toJson()); file.close(); qDebug() << "JSON 导出完成!"; } }
QProgressDialog
提示用户。 LIMIT
和 OFFSET
分页查询,避免内存溢出。 QThread
中,防止界面卡顿。 用 Qt 导出数据库数据就这么简单!无论是 CSV、Excel 还是 JSON,只需几行代码就能搞定,如果你有更复杂的需求(PDF 导出),可以结合第三方库如 QtRPT 或 PDFium。
🚀 动手试试吧! 如果有问题,欢迎在评论区交流~
本文由 貊乐怡 于2025-08-06发表在【云服务器提供商】,文中图片由(貊乐怡)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/549127.html
发表评论