LimeReport Forum

General Category | Основное => Discussion | Обсуждение => Topic started by: yurii on July 21, 2018, 12:43:07 PM

Title: Сохранение шаблона отчета в базу данных
Post by: yurii on July 21, 2018, 12:43:07 PM
Шаблоны отчетов сохраняю в БД QByteArray, но теперь нужно их редактировать. Как получить сигнал на сохранение из дизайнера?
Title: Re: Сохранение шаблона отчета в базу данных
Post by: Arin Alex on July 21, 2018, 08:56:22 PM
yurii
сигнал onSave() у ReportEngine.
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on July 22, 2018, 09:56:32 AM

connect(LimeReport::ReportEngine, &LimeReport::ReportEngine::onSave, this,  &Report::UpdateReport);
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on July 22, 2018, 10:26:05 AM
Как правильно получить сигнал?
Title: Re: Сохранение шаблона отчета в базу данных
Post by: Arin Alex on July 22, 2018, 01:14:59 PM
Я имел ввиду сигнал у экземпляра ReportEngine;
Code: [Select]
LimeReport::ReportEngine* rpt = new LimeReport::ReportEngine();
rpt->loadFromByteArray(source);
connect(rpt, &LimeReport::ReportEngine::onSave, this, &MainWindow::slotOnSave);
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on July 22, 2018, 03:25:20 PM
Ошибка
Warning: QMetaObject::Connection>> QObject::connect: signal not found in LimeReport::ReportEngine
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on July 22, 2018, 03:30:38 PM
А в loadFromByteArray(source) мы передаем QByteArray byteArray = qry.value("template").toByteArray();?
Title: Re: Сохранение шаблона отчета в базу данных
Post by: Arin Alex on July 22, 2018, 11:39:42 PM
А версия лайма какая?
А если старый синтаксис попробовать?
Code: [Select]

connect(report, SIGNAL(onSave()), this, SLOT(slotOnSave()));
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on July 26, 2018, 07:48:57 PM
Пробовал, то же самое. А можно по подробнее описать сам процесс редактирования и сохранения. То есть я беру из БД ByteArray и сразу его передаю в loadFromByteArray(ByteArray). Далее открывается дизайнер и ловлю сигнал на сохранение. Что я должен сохранить?
Title: Re: Сохранение шаблона отчета в базу данных
Post by: Arin Alex on July 27, 2018, 08:29:15 PM
Если limereport собирается из develop ветки то там сигнал onSave(bool& saved). Сам процесс довольно прост. Загрузили из массива байт, отредактировали, потом выловили сигнал на сохранение, сохранились в массив байт и пихнули в базу
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on July 29, 2018, 08:51:55 AM
У меня ошибка при передачи массива, conversion from 'QByteArray' to 'QByteArray*' is ambiguous rpt->loadFromByteArray(byteArray);
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on July 29, 2018, 09:11:08 AM
Все работает, спасибо
   QByteArray byteArray = qry.value("template").toByteArray();
   LimeReport::ReportEngine* rpt = new LimeReport::ReportEngine();
   rpt->loadFromByteArray(&byteArray);
   connect(rpt, &LimeReport::ReportEngine::saveFinished, this, &Settings::UpdateTemplate);
   rpt->designReport();

А как теперь забрать измененный массив?

Title: Re: Сохранение шаблона отчета в базу данных
Post by: Arin Alex on July 30, 2018, 11:58:12 PM
Ловить все же нужно onSave, а не saveFinished. Поскольку saveFinished летит когда процесс записи закончен.
Quote
А как теперь забрать измененный массив?
saveToByteArray();
 
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on August 11, 2018, 04:23:04 PM
Но при этом открывается окно для сохранения в файл?
Title: Re: Сохранение шаблона отчета в базу данных
Post by: Arin Alex on August 13, 2018, 11:32:24 PM
Если в слоте onSave() вызван метод report->saveToByteArray() то не открывается.
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on August 24, 2018, 05:09:39 PM
У меня так и не получается сохранить массив.

        LimeReport::ReportEngine* rpt = new LimeReport::ReportEngine();
        rpt->loadFromByteArray(&byteArray);
        connect(rpt, SIGNAL(saveFinished()), this, SLOT(tempalte_update()));
        connect(rpt, &LimeReport::ReportEngine::onSave, rpt, &LimeReport::ReportEngine::saveToByteArray);
        rpt->designReport();
Title: Re: Сохранение шаблона отчета в базу данных
Post by: Arin Alex on August 24, 2018, 05:18:21 PM
Я сегодня вечерком демку сделаю, так проще будет.
Title: Re: Сохранение шаблона отчета в базу данных
Post by: Arin Alex on August 25, 2018, 05:02:08 AM
Вот модифицированный demo_r1. Надеюсь поможет :)
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on August 25, 2018, 09:31:58 AM
Спасибо. Это просто чудо. Все работает.
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on July 18, 2020, 08:45:03 PM
Добрый вечер. Почему то у меня не вызывается сигнал onSave, пересобирать проект пробовал, скачал самую свежую версию. Но не получается(
Title: Re: Сохранение шаблона отчета в базу данных
Post by: Arin Alex on July 18, 2020, 09:27:07 PM
Приветствую!
Сигнал onSave() поменял сигнатуру на onSave(bool& saved) для возможности идентификации факта успешной записи.
В переменную saved нужно передать true в  случае успешной записи.
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on July 18, 2020, 10:08:19 PM
Я наверное не совсем понял, как отправить при успешной записи?

 connect(report, SIGNAL(onSave(saved)), this, SLOT(slotOnSave()));
Title: Re: Сохранение шаблона отчета в базу данных
Post by: Arin Alex on July 18, 2020, 10:30:08 PM
Code: [Select]
connect(report, SIGNAL(onSave(bool&)), this, SLOT(slotOnSave(bool&)));
::slotOnSave(bool& saved){
....
  saved = true;
}
Title: Re: Сохранение шаблона отчета в базу данных
Post by: yurii on July 18, 2020, 10:35:17 PM
Спасибо. Теперь понятно)