开源报表工具Limereport交叉编译及使用

0. 写在前面

0.0 开源报表工具调研

0.1Limereport介绍

  1. 官网地址:https://www.limereport.ru/en/index.php

LimeReport -使用QT框架编写的多平台C++报表生成器库,并为软件开发人员提供,它们希望添加到应用程序的能力中,以形成使用模板生成的报表或打印表单。
库中包含的报表设计器允许创建快速直观的打印表单模板,这些模板可以以XML格式保存并用于生成报表页面。因此,形成的页面可以发送到预览、PDF文件或打印机。
作为数据源,开发人员可以使用SQL数据库或使用QabStretctTableModel接口从应用程序传递的数据。此外,还可以初始化变量,这些变量可用作数据库请求参数。
LimeReport的目标是为您的应用程序提供功能丰富、同时易于使用的工具,以便生成报告,即使是没有经验的IT用户也可以使用

1.最大的优点是基于qt,所以可以跨平台使用;
2.直接拖动设计模板,十分方便

  1. 使用说明
    进入官网页面,进入到下载页面,如下:
    源码获取有两种渠道: 1.sourceFoge
    2. github

    sourceFoge页面
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    github页面能获取到最新代码

    在这里插入图片描述
    获取release稳定版本。qt5以下版本注意只能选择1.4及以下的版本**

这里我使用的是qt4.8.6;所以我选择的Limereport版本为1.4.51
在这里插入图片描述

1.Limereport编译

1.1windows/Linux环境下编译

直接使用qt打开Limereport工程.pro文件,直接编译即可,

默认编译Limereport动态库,如果想要编译静态库,则如下配置即可:
在这里插入图片描述

注意使用qt4.8.6,编译qt源码时需要编译tools,因为Limereport依赖Qtuitools等库文件。其他大于次版本qt则无需注意,有安装版本,无需手动编译qt源码。

1.2Limereport交叉编译

我们要想使用这个库到嵌入式设备中,那就需要我们交叉编译,这里我们默认已经交叉编译好qt4.8.6源码了,见我的另一篇博客:https://blog.csdn.net/Wmll1234567/article/details/124284346?spm=1001.2014.3001.5501

首先我们需要配置编译环境,配置如下:
1.配置交叉编译器在这里插入图片描述
2.配置qt版本
在这里插入图片描述
3.配置编译套件
在这里插入图片描述
配置完成后编译即可
最后编译的结果如图:
在这里插入图片描述

2.编译后的Limereport库使用

2.1 添加库头文件和路径

在新工程的pro文件里添加头文件和库路径

  1. INCLUDEPATH +=…\source\Limereport\Linux\arm-release\include
    2.添加库路径在这里插入图片描述

2.2 代码里如何使用

其实可以看源代码使用实例
我觉的Liemereport厉害之处就是报表文件的模板是兼容的,windows上制作模板,其他版本交叉编译的程序也能加载此模板

这是运行limereport官网windows安装包程序设计的模板,

这里是引用
模板文件是.lrxml格式
$V是变量的意思,根据所需去设置变量具体的值
具体使用设置如下:
在这里插入图片描述
预览的结果:
在这里插入图片描述

2.2.2 代码详细讲解

在这里插入图片描述
源文件添加上述头文件
主要核心的两个类接口
LimeReport::ReportEngine (服务类,负责模板加载、生成pdf等)
LimeReport::PreviewReportWidget(显示预览类,主要就是预览模板)

全部使用的代码如下:

//FReportPreview.h
#ifndef FREPORTPREVIEW_H
#define FREPORTPREVIEW_H

#include <QWidget>
#include "ui_FReportPreview.h"
#include "lrreportengine.h"
#include "lrcallbackdatasourceintf.h"
#include <QLayout>
#include <QGesture>
#include <QGestureEvent>
#include <QPinchGesture>
#include <QDebug>
#include <QScrollBar>
class FReportPreview : public QWidget
{
	Q_OBJECT

public:
	FReportPreview(QWidget *parent = 0);
	~FReportPreview();

private slots:
    void on_desiner_clicked();
    void on_pushButton_clicked();
	void InitWidget();
    void on_print_start_clicked();
	void on_pdf(LimeReport::ReportEngine *report);
protected:
    bool event(QEvent *event);
private:
    bool gestureEvent(QGestureEvent *event);
    void pinchTriggered(QPinchGesture*);
private:
	Ui::FReportPreview *ui;

	 LimeReport::ReportEngine *report;
	 LimeReport::PreviewReportWidget* m_preview;

	QString print_name;
    int print_sex;
    int print_years;
    QString print_ID;
	QString record_Date;
	QString Doctor;
	QString Print_date;
	QString Print_image_path;
};

#endif // FREPORTPREVIEW_H

//FReportPreview.cpp
#include "FReportPreview.h"
#include <QHBoxLayout>
#include <QFileInfo>
#include <QGesture>
#include <QGestureEvent>
#include <QPinchGesture>
FReportPreview::FReportPreview(QWidget *parent)
	: QWidget(parent),
	ui(new Ui::FReportPreview)
{
	ui->setupUi(this);
	//ui->desiner->hide();
	ui->pushButton->hide();
	//setMouseTracking(true);
	InitWidget();
	
	//setWindowFlags(Qt::FramelessWindowHint);
	report = new LimeReport::ReportEngine();
    m_preview = report->createPreviewWidget();
    report->dataManager()->setReportVariable("company_name",tr("Coronary Function Measurement Record"));
	report->dataManager()->setReportVariable("date",tr("Record Date:"));
	report->dataManager()->setReportVariable("m_patent_name",tr("Name:"));
	report->dataManager()->setReportVariable("m_patient_sex",tr("Sex:"));
	report->dataManager()->setReportVariable("m_patient_year",tr("Years:"));
	report->dataManager()->setReportVariable("m_patent_id",tr("ID:"));
	report->dataManager()->setReportVariable("m_image",tr("Waveform:"));
	report->dataManager()->setReportVariable("m_doctor",tr("Doctor:"));
	report->dataManager()->setReportVariable("m_patient_sex",tr("Sex:"));
	report->dataManager()->setReportVariable("m_print_date",tr("Print date:"));

	report->dataManager()->setReportVariable("patent_name",print_name);
    report->dataManager()->setReportVariable("patent_sex",print_sex);
    report->dataManager()->setReportVariable("patent_year",print_years);
    report->dataManager()->setReportVariable("patent_ID",print_ID);
    report->dataManager()->setReportVariable("patent_doctor",Doctor);
    report->dataManager()->setReportVariable("print_date",Print_date);
    report->dataManager()->setReportVariable("record_date",record_Date);
	if(report->dataManager()->containsVariable("image"));
	{
		report->dataManager()->setReportVariable("image",Print_image_path);
	} 
     QFileInfo fileInfo("FFR-all.lrxml");
     if(fileInfo.isFile())
     {
            report->loadFromFile("FFR-all.lrxml");
            m_preview->refreshPages();

     }
    
	m_preview->setScalePercent(50);
	//m_preview->setAttribute( Qt::WA_Hover,true);
	QVBoxLayout *vbox = new QVBoxLayout();
	m_preview->resize(1200,1600);
	vbox->addWidget(m_preview);
    ui->groupBox->setLayout(vbox);
	//setStyleSheet("QWidget{background-color:rgb(255, 255, 0)}");

	
    connect(ui->desiner, SIGNAL(clicked()), this, SLOT(on_desiner_clicked()));
	
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
    connect(ui->pushButton_2, SIGNAL(clicked()), m_preview, SLOT(zoomIn()));
    connect(ui->pushButton_3, SIGNAL(clicked()), m_preview, SLOT(zoomOut()));
    ui->pushButton_4->raise();
    ui->pushButton_4->show();
	//setAttribute( Qt::WA_Hover,true);
    /*ui->widget->raise();
	QPalette palette;
    palette.setColor(QPalette::Background, QColor(0,0,0,150)); // 最后一项为透明度
    //palette.setBrush(QPalette::Background, QBrush(QPixmap(":/background.png")));
	 ui->widget->setMouseTracking(true);
    ui->widget->setPalette(palette);*/
     //ui->groupBox->layout()->
    //ui->scrollArea->setWidget(ui->groupBox);
	//ui->scrollArea->setAttribute( Qt::WA_Hover,true);
	//ui->scrollArea->verticalScrollBar()->setValue(1000);
}

FReportPreview::~FReportPreview()
{
	delete ui;
}
bool FReportPreview::event(QEvent *event)
{
	qDebug("%d",event->type());
	//int nTotalValue = ui->scrollArea->verticalScrollBar()->value();
    if (event->type() == QEvent::HoverEnter || event->type() == QEvent::HoverLeave
            || event->type() == QEvent::HoverMove)
    {
            QHoverEvent* pHoverEvent = static_cast<QHoverEvent *>(event);
            //if(event->type() == QEvent::HoverEnter){
            int nTotalValue = ui->scrollArea->verticalScrollBar()->value();
           //2:将滚动条的位置设置成二分之一处。
            int nNewLoaction = nTotalValue*0.5;
            ui->scrollArea->verticalScrollBar()->setValue(1000);
			//}

    }
    return QWidget::event(event);
}
bool FReportPreview::gestureEvent(QGestureEvent *event)
{
    if (QGesture *pinch = event->gesture(Qt::PinchGesture)){
        pinchTriggered(static_cast<QPinchGesture *>(pinch));
        //FLogError("gestureEvent");
    }
    return true;
}
void FReportPreview::pinchTriggered(QPinchGesture *gesture)
{
//    QPinchGesture::ChangeFlags changeFlags = gesture->changeFlags();
//    if (changeFlags & QPinchGesture::ScaleFactorChanged) {
//        currentStepScaleFactor = gesture->totalScaleFactor();
//    }
//    if (gesture->state() == Qt::GestureFinished) {
//        scaleFactor *= currentStepScaleFactor;
//        currentStepScaleFactor = 1;
//    }
    //FLogError("pinchTriggered");
    m_preview->zoomOut();
    update();
}
void FReportPreview::InitWidget() {
    ui->print_color->clear();
    QStringList langts;
    langts << tr("colour")
        << tr("black-and-white");
    ui->print_color->insertItem(0, langts[0]);
    ui->print_color->insertItem(1, langts[1]);

	QStringList langts1;
    langts1 << tr("colour")
        << tr("black-and-white");
    ui->place->insertItem(0, langts[0]);
    ui->place->insertItem(1, langts[1]);
	 print_name = "zhangsan";
    print_sex =0;
    print_years=0;
    print_ID = "20220427034724";
    record_Date = "2022-2-29 10:23:37";
    Doctor = "WangQiang";
    Print_date = "2022-5-10 10:23:37";
    Print_image_path = "20220601112220.png";
}
void FReportPreview::on_desiner_clicked()
{
  
  
   report->designReport();

}

void FReportPreview::on_pushButton_clicked()
{
  m_preview->show();
	
}
void FReportPreview::on_pdf(LimeReport::ReportEngine *report){
	report->printToPDF("wml3.pdf");
}
void FReportPreview::on_print_start_clicked()
{
	on_pdf(report);
}

在这里插入图片描述

这个demo运行结果如下这里是引用

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值