Qt中配置Limereport的数据库数据源的实现

 更新时间:2025年09月18日 10:26:07   作者:歪歪100  
本文介绍了在Qt中为Limereport配置数据库数据源的方法,文章提供了MySQL、PostgreSQL等不同数据库的连接示例,并详细说明了数据绑定和参数设置,感兴趣的可以了解一下

一、基本配置流程

  1. 添加数据库模块
    首先在 .pro 文件中确保启用 Qt SQL 模块:

    QT += sql
    
  2. 数据库连接
    使用 Qt 的 QSqlDatabase 建立数据库连接,支持 MySQL、PostgreSQL、SQLite 等主流数据库:

dbmanager.cpp文件如下:

#include "dbmanager.h"
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>

DBManager::DBManager(QObject *parent) : QObject(parent)
{

}

bool DBManager::connectToDatabase(const QString &dbType, const QString &host, 
                                 int port, const QString &dbName, 
                                 const QString &user, const QString &password)
{
    // 检查是否已存在相同名称的连接
    if (QSqlDatabase::contains("limereport_conn")) {
        m_db = QSqlDatabase::database("limereport_conn");
    } else {
        // 创建新连接
        m_db = QSqlDatabase::addDatabase(dbType, "limereport_conn");
        m_db.setHostName(host);
        m_db.setPort(port);
        m_db.setDatabaseName(dbName);
        m_db.setUserName(user);
        m_db.setPassword(password);
    }

    // 测试连接
    if (!m_db.open()) {
        qCritical() << "数据库连接失败:" << m_db.lastError().text();
        return false;
    }
    
    qDebug() << "数据库连接成功";
    return true;
}

// 针对SQLite的简化连接方法
bool DBManager::connectToSQLite(const QString &dbPath)
{
    return connectToDatabase("QSQLITE", "", 0, dbPath, "", "");
}

QSqlDatabase DBManager::database() const
{
    return m_db;
}

二、绑定数据源到报表

连接数据库后,需要创建数据模型并绑定到 Limereport 报表:
reportgenerator.cpp文件如下:

#include "reportgenerator.h"
#include "limereport/limereport.h"
#include <QSqlQueryModel>
#include <QSqlQuery>

ReportGenerator::ReportGenerator(QObject *parent) : QObject(parent)
{

}

bool ReportGenerator::generateReport(const QString &templatePath, DBManager *dbManager)
{
    if (!dbManager || !dbManager->database().isOpen()) {
        qCritical() << "数据库连接未就绪";
        return false;
    }

    // 创建报表实例
    LimeReport::Report *report = new LimeReport::Report();

    // 1. 创建并绑定主数据集
    QSqlQueryModel *mainModel = new QSqlQueryModel(report);
    mainModel->setQuery("SELECT id, name, price, stock FROM products", dbManager->database());
    
    // 为字段设置友好名称(在报表设计器中显示)
    mainModel->setHeaderData(0, Qt::Horizontal, "产品ID");
    mainModel->setHeaderData(1, Qt::Horizontal, "产品名称");
    mainModel->setHeaderData(2, Qt::Horizontal, "单价");
    mainModel->setHeaderData(3, Qt::Horizontal, "库存");
    
    // 添加到报表数据源,"products"为数据源名称(设计器中需对应)
    report->dataManager()->addModel("products", mainModel, true);

    // 2. 可选:添加第二个数据集(例如订单数据)
    QSqlQueryModel *orderModel = new QSqlQueryModel(report);
    orderModel->setQuery("SELECT order_no, order_date, customer FROM orders WHERE status=1", 
                         dbManager->database());
    report->dataManager()->addModel("orders", orderModel, true);

    // 3. 可选:添加报表参数
    report->setParameterValue("companyName", "我的公司");
    report->setParameterValue("reportDate", QDate::currentDate().toString("yyyy-MM-dd"));

    // 加载报表模板
    if (!report->loadFromFile(templatePath)) {
        qCritical() << "加载报表模板失败:" << report->lastError();
        delete report;
        return false;
    }

    // 预览报表
    report->previewReport();
    
    // 报表会在预览窗口关闭后自动释放
    return true;
}

三、报表设计器中的数据源配置

  1. 加载数据源
    在 Limereport 设计器中,点击菜单栏的「Data」→「Data Sources」,可以看到代码中添加的数据源(如 “products”、“orders”)。

  2. 绑定数据字段

    • 拖拽「Text」元素到报表
    • 双击文本元素,在弹出的编辑器中使用 [数据源名称.字段名] 格式绑定,例如:
      • [products.name] 绑定产品名称
      • [orders.order_date] 绑定订单日期
  3. 使用参数
    报表参数通过 [参数名] 格式引用,例如 [companyName][reportDate]

四、不同数据库的连接参数示例

数据库类型dbType 参数典型连接参数
SQLite“QSQLITE”只需指定 dbName 为数据库文件路径
MySQL“QMYSQL”host、port(3306)、dbName、user、password
PostgreSQL“QPSQL”host、port(5432)、dbName、user、password
SQL Server“QODBC”使用ODBC连接字符串

五、常见问题解决

  1. 数据库驱动缺失
    确保 Qt 安装了对应数据库的驱动,可通过 QSqlDatabase::drivers() 查看已安装驱动。

  2. 数据源名称不匹配
    代码中 addModel() 的第一个参数必须与报表设计器中使用的数据源名称完全一致。

  3. 中文乱码问题
    确保数据库连接使用正确的字符集(如 UTF8),可在连接后执行:

    QSqlQuery query(dbManager->database());
    query.exec("SET NAMES 'utf8'");
    

通过以上步骤,即可在 Qt 中为 Limereport 配置数据库数据源,实现动态数据报表的生成。

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

相关文章

  • C++ Vector迭代器失效问题的解决方法

    C++ Vector迭代器失效问题的解决方法

    最近我学习了C++中的迭代器失效问题,迭代器失效问题是非常非常重要的,所以特意整理出来一篇文章供我们一起复习和学习
    2022-08-08
  • Qt使用QSoundEffect类实现播放音效或音乐

    Qt使用QSoundEffect类实现播放音效或音乐

    这篇文章主要为大家详细介绍了Qt如何使用QSoundEffect类实现播放音效或音乐功能,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2024-12-12
  • C语言学习之关键字的示例详解

    C语言学习之关键字的示例详解

    关键字,这名字一听,就很关键。而有些关键字,你可能不是很了解,更别谈使用。所以,这篇文章将带你见识常见的关键字,一起领略它们的风采吧
    2022-10-10
  • C++11 GC Interface垃圾回收从入门到精通

    C++11 GC Interface垃圾回收从入门到精通

    本文主要介绍了C++11 GC Interface垃圾回收从入门到精通,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06
  • c++实现十进制转换成16进制示例

    c++实现十进制转换成16进制示例

    这篇文章主要介绍了c++实现十进制转换成16进制示例,需要的朋友可以参考下
    2014-05-05
  • C++单例类模板详解

    C++单例类模板详解

    这篇文章主要介绍了C++单例类模板,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 深入学习C语言中的函数指针和左右法则

    深入学习C语言中的函数指针和左右法则

    这篇文章主要介绍了深入学习C语言中的函数指针和左右法则,左右法则是一种常用的C指针声明,需要的朋友可以参考下
    2015-08-08
  • C语言的递归函数详解

    C语言的递归函数详解

    这篇文章主要为大家介绍了C语言的递归函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C语言运算符及其优先级汇总表口诀

    C语言运算符及其优先级汇总表口诀

    由于C语言的运算符优先级与C++的不完全一样(主要是增加了几个运算符),所以这个口诀不能完全实用于C++.但是应该能够兼容,大家可以比较一下他们的区别应该就能够很快掌握C++的优先级的
    2013-07-07
  • 使用dc画笔画矩形、直线与椭圆示例

    使用dc画笔画矩形、直线与椭圆示例

    这篇文章主要介绍了使用dc画笔画矩形、直线与椭圆示例,需要的朋友可以参考下
    2014-04-04

最新评论