С того момента как вы выпустили 1.4.6 отлично ее пользовал уже месяцев 5, пока в один прекрасный момент (вчера) не пришлось генерить отчет на 1500 страниц. Отчет сгенерился нормально, но закрывалось это все дело минуты 3, при этом пролист страниц был довольно тормозной.
Решил проверить наличие новой версии и вуаля 1.4.7
Все собрал, запустил, сгенерил - все отлично, генериться пролистывается и закрывается быстро, но выжирается памяти просто немеренно (около 1500 страниц - 1Гб). Но фиг с ним выедается - НЕ ОСВОБОЖДАЕТСЯ.
И второе, может я чего не понимаю но setShowProgressDialog(true); не работает. По крайней мере у меня никакого прогресс бара не появляется.
код в студию:
namespace report {
typedef QMap<QString, QString> Variables;
typedef QMapIterator<QString, QString> VarsIter;
class reports_printer : public Singleton<reports_printer>
{
private:
reports_printer() : m_report(nullptr) { ; }
//
reports_printer(const reports_printer &) = delete;
reports_printer& operator = (const reports_printer &) = delete;
//
virtual ~reports_printer() { reset_report(); }
public:
void create_report(QAbstractItemModel* data, QString report_templte, Variables vars = Variables())
{
m_report = new LimeReport::ReportEngine;
if(data && !report_templte.isEmpty())
{
if(vars.isEmpty()) qDebug() << "No variables";
else
{
VarsIter iter(vars);// vars.begin();
while(iter.hasNext())
{
iter.next();
m_report->dataManager()->setReportVariable(iter.key(), QVariant(iter.value()));
}
}
const QString REPORT_MODEL_NAME = "table_model";
m_report->dataManager()->addModel(REPORT_MODEL_NAME, data, false);
if(!m_report->loadFromFile(report_templte))
{
qDebug() << "Wrong report template";
reset_report();
return;
}
if (ref_data::get()->debug_prn())
{
m_report->designReport();
}
else
{
m_report->setPreviewWindowTitle(QObject::tr("Preview"));
//m_report->createPreviewWidget()->show();
m_report->setResultEditable(false);
m_report->setShowProgressDialog(true);
m_report->previewReport();
}
}
else
{
if(!data) qDebug() << "Wrong data: nullptr";
if(report_templte.isEmpty()) qDebug() << "Wrong report template: path is empty";
}
reset_report();
}
private:
void reset_report()
{
QGuiApplication::restoreOverrideCursor();
if(m_report) delete m_report;
m_report = nullptr;
}
friend class Singleton<reports_printer>;
private:
LimeReport::ReportEngine* m_report;
};
} // namespace report
т.е после каждого построения отчета всегда (ну только если откуда -нить exception не вылетит) вызывается reset_report. Но top мне упорно показывает 1 Гиг отожранной памяти.
Спасибо.