0
0
mirror of https://github.com/fralx/LimeReport.git synced 2024-12-24 16:44:39 +03:00

fix #3 ReportEngine крашится, если попытаться его удалить на открытом preview

This commit is contained in:
Arin Alexander 2016-02-20 13:37:18 +03:00
parent 44fba80068
commit 5108c3a49d
2 changed files with 19 additions and 2 deletions

View File

@ -55,7 +55,7 @@ QSettings* ReportEngine::m_settings = 0;
ReportEnginePrivate::ReportEnginePrivate(QObject *parent) : ReportEnginePrivate::ReportEnginePrivate(QObject *parent) :
QObject(parent), m_fileName(""), m_settings(0), m_ownedSettings(false), QObject(parent), m_fileName(""), m_settings(0), m_ownedSettings(false),
m_printer(new QPrinter(QPrinter::HighResolution)), m_printerSelected(false), m_printer(new QPrinter(QPrinter::HighResolution)), m_printerSelected(false),
m_showProgressDialog(true), m_reportName("") m_showProgressDialog(true), m_reportName(""), m_activePreview(0)
{ {
m_datasources= new DataSourceManager(this); m_datasources= new DataSourceManager(this);
m_datasources->setObjectName("datasources"); m_datasources->setObjectName("datasources");
@ -64,6 +64,9 @@ ReportEnginePrivate::ReportEnginePrivate(QObject *parent) :
ReportEnginePrivate::~ReportEnginePrivate() ReportEnginePrivate::~ReportEnginePrivate()
{ {
if (m_activePreview){
m_activePreview->close();
}
foreach(PageDesignIntf* page,m_pages) delete page; foreach(PageDesignIntf* page,m_pages) delete page;
m_pages.clear(); m_pages.clear();
if (m_ownedSettings&&m_settings) delete m_settings; if (m_ownedSettings&&m_settings) delete m_settings;
@ -81,7 +84,7 @@ QObject *ReportEnginePrivate::elementAt(const QString &, int index)
PageDesignIntf *ReportEnginePrivate::createPage(const QString &pageName) PageDesignIntf *ReportEnginePrivate::createPage(const QString &pageName)
{ {
PageDesignIntf* page =new PageDesignIntf(this); PageDesignIntf* page =new PageDesignIntf();
page->setObjectName(pageName); page->setObjectName(pageName);
page->setReportEditor(this); page->setReportEditor(this);
return page; return page;
@ -130,6 +133,13 @@ void ReportEnginePrivate::slotDataSourceCollectionLoaded(const QString &collecti
emit datasourceCollectionLoadFinished(collectionName); emit datasourceCollectionLoadFinished(collectionName);
} }
void ReportEnginePrivate::slotPreviewWindowDestroed(QObject* window)
{
if (m_activePreview == window){
m_activePreview = 0;
}
}
void ReportEnginePrivate::clearReport() void ReportEnginePrivate::clearReport()
{ {
foreach(PageDesignIntf* page,m_pages) delete page; foreach(PageDesignIntf* page,m_pages) delete page;
@ -291,6 +301,8 @@ void ReportEnginePrivate::previewReport()
if (!dataManager()->errorsList().isEmpty()){ if (!dataManager()->errorsList().isEmpty()){
w->setErrorMessages(dataManager()->errorsList()); w->setErrorMessages(dataManager()->errorsList());
} }
m_activePreview = w;
connect(w,SIGNAL(destroyed(QObject*)), this, SLOT(slotPreviewWindowDestroed(QObject*)));
qDebug()<<"render time ="<<start.msecsTo(QTime::currentTime()); qDebug()<<"render time ="<<start.msecsTo(QTime::currentTime());
w->exec(); w->exec();
} }

View File

@ -32,6 +32,7 @@
#include <QObject> #include <QObject>
#include <QSharedPointer> #include <QSharedPointer>
#include <QMainWindow>
#include "lrreportengine.h" #include "lrreportengine.h"
#include "lrcollection.h" #include "lrcollection.h"
#include "lrglobal.h" #include "lrglobal.h"
@ -100,6 +101,7 @@ public:
QString currentReportsDir(){ return m_reportsDir;} QString currentReportsDir(){ return m_reportsDir;}
void setReportName(const QString& reportName){ m_reportName=reportName;} void setReportName(const QString& reportName){ m_reportName=reportName;}
QString reportName(){ return m_reportName;} QString reportName(){ return m_reportName;}
bool hasActivePreview(){return m_activePreview;}
signals: signals:
void pagesLoadFinished(); void pagesLoadFinished();
void datasourceCollectionLoadFinished(const QString& collectionName); void datasourceCollectionLoadFinished(const QString& collectionName);
@ -115,6 +117,8 @@ protected:
PageDesignIntf* createPage(const QString& pageName=""); PageDesignIntf* createPage(const QString& pageName="");
protected slots: protected slots:
void slotDataSourceCollectionLoaded(const QString& collectionName); void slotDataSourceCollectionLoaded(const QString& collectionName);
private slots:
void slotPreviewWindowDestroed(QObject *window);
private: private:
//ICollectionContainer //ICollectionContainer
virtual QObject* createElement(const QString&,const QString&); virtual QObject* createElement(const QString&,const QString&);
@ -139,6 +143,7 @@ private:
bool m_showProgressDialog; bool m_showProgressDialog;
QString m_reportsDir; QString m_reportsDir;
QString m_reportName; QString m_reportName;
QMainWindow* m_activePreview;
}; };
} }