Welcome, Guest. Please login or register.
Did you miss your activation email?

Author Topic: Падает при освобождении ресурсов  (Read 2388 times)

Dark2011

  • Newbie
  • *
  • Posts: 27
    • View Profile
Падает при освобождении ресурсов
« on: November 09, 2016, 06:04:06 PM »
Есть разные программные модули - у каждых своя модель...
Есть один синглтон-принтер - внутри которого LimeReport::ReportEngine*;

У этого принтера есть вот такой вот метод

Code: [Select]
  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";
        }
    }

Печатаю отчет из одного модуля - все ок!
Печатаю из другого - удаляю старую модель       
Code: [Select]
      if(m_report->dataManager()->containsDatasource(REPORT_MODEL_NAME))
                m_report->dataManager()->removeModel(REPORT_MODEL_NAME);

далее устанавливаю новую - падает
Code: [Select]
      m_report->dataManager()->addModel(REPORT_MODEL_NAME, data, true);

Баг или я что то не то делаю?

Версия LM master с github от вчерашнего дня)
« Last Edit: November 09, 2016, 06:10:16 PM by Dark2011 »

Dark2011

  • Newbie
  • *
  • Posts: 27
    • View Profile
Re: Падает при освобождении ресурсов
« Reply #1 on: November 09, 2016, 06:29:14 PM »
при 3-ей параметре false все работает
Code: [Select]
m_report->dataManager()->addModel(REPORT_MODEL_NAME, data, false);
каким образом осуществыляется передача владения  - копирование модели?

Subst

  • Sr. Member
  • ****
  • Posts: 444
    • View Profile
Re: Падает при освобождении ресурсов
« Reply #2 on: November 09, 2016, 06:38:25 PM »
выставляй false в параметр owned.
Выставляя true ты говоришь грохать модель при удалении ее из датасоурсменеджер

Subst

  • Sr. Member
  • ****
  • Posts: 444
    • View Profile
Re: Падает при освобождении ресурсов
« Reply #3 on: November 09, 2016, 06:45:21 PM »
Блин, не заметил, что ты уже нашел...

вот тут как я понимаю

ModelToDataSource::~ModelToDataSource()
{
    if ((m_owned) && m_model!=0)
        delete m_model;
}

это в lrdataidesignnf.cpp

грохая модель из датасоурс, мы хрохнем и саму модель вообще, если передали владение датасоурсу. Указатель на модель мы передаем первым параметром.