LimeReport Forum
General Category | Основное => Discussion | Обсуждение => Topic started by: Dark2011 on November 09, 2016, 06:04:06 pm
-
Есть разные программные модули - у каждых своя модель...
Есть один синглтон-принтер - внутри которого LimeReport::ReportEngine*;
У этого принтера есть вот такой вот метод
void create_report(QAbstractItemModel* data, QString report_templte)
{
if(data && !report_templte.isEmpty())
{
const QString REPORT_MODEL_NAME = "table_model";
if(m_report->dataManager()->containsDatasource(REPORT_MODEL_NAME))
m_report->dataManager()->removeModel(REPORT_MODEL_NAME);
m_report->dataManager()->addModel(REPORT_MODEL_NAME, data, true);
if(!m_report->loadFromFile(report_templte))
{
qDebug() << "Wrong report template";
return;
}
int debug_mode = 0; // TODO we need to get it from global settings object
if(debug_mode)
{
//m_report->setShowProgressDialog(false);
m_report->designReport();
}
else m_report->previewReport();
}
else
{
if(!data) qDebug() << "Wrong data: nullptr";
if(report_templte.isEmpty()) qDebug() << "Wrong report template: path is empty";
}
}
Печатаю отчет из одного модуля - все ок!
Печатаю из другого - удаляю старую модель
if(m_report->dataManager()->containsDatasource(REPORT_MODEL_NAME))
m_report->dataManager()->removeModel(REPORT_MODEL_NAME);
далее устанавливаю новую - падает
m_report->dataManager()->addModel(REPORT_MODEL_NAME, data, true);
Баг или я что то не то делаю?
Версия LM master с github от вчерашнего дня)
-
при 3-ей параметре false все работает
m_report->dataManager()->addModel(REPORT_MODEL_NAME, data, false);
каким образом осуществыляется передача владения - копирование модели?
-
выставляй false в параметр owned.
Выставляя true ты говоришь грохать модель при удалении ее из датасоурсменеджер
-
Блин, не заметил, что ты уже нашел...
вот тут как я понимаю
ModelToDataSource::~ModelToDataSource()
{
if ((m_owned) && m_model!=0)
delete m_model;
}
это в lrdataidesignnf.cpp
грохая модель из датасоурс, мы хрохнем и саму модель вообще, если передали владение датасоурсу. Указатель на модель мы передаем первым параметром.