LimeReport Forum
General Category | Основное => Discussion | Обсуждение => Topic started by: yurii on July 21, 2018, 12:43:07 pm
-
Шаблоны отчетов сохраняю в БД QByteArray, но теперь нужно их редактировать. Как получить сигнал на сохранение из дизайнера?
-
yurii
сигнал onSave() у ReportEngine.
-
connect(LimeReport::ReportEngine, &LimeReport::ReportEngine::onSave, this, &Report::UpdateReport);
-
Как правильно получить сигнал?
-
Я имел ввиду сигнал у экземпляра ReportEngine;
LimeReport::ReportEngine* rpt = new LimeReport::ReportEngine();
rpt->loadFromByteArray(source);
connect(rpt, &LimeReport::ReportEngine::onSave, this, &MainWindow::slotOnSave);
-
Ошибка
Warning: QMetaObject::Connection>> QObject::connect: signal not found in LimeReport::ReportEngine
-
А в loadFromByteArray(source) мы передаем QByteArray byteArray = qry.value("template").toByteArray();?
-
А версия лайма какая?
А если старый синтаксис попробовать?
connect(report, SIGNAL(onSave()), this, SLOT(slotOnSave()));
-
Пробовал, то же самое. А можно по подробнее описать сам процесс редактирования и сохранения. То есть я беру из БД ByteArray и сразу его передаю в loadFromByteArray(ByteArray). Далее открывается дизайнер и ловлю сигнал на сохранение. Что я должен сохранить?
-
Если limereport собирается из develop ветки то там сигнал onSave(bool& saved). Сам процесс довольно прост. Загрузили из массива байт, отредактировали, потом выловили сигнал на сохранение, сохранились в массив байт и пихнули в базу
-
У меня ошибка при передачи массива, conversion from 'QByteArray' to 'QByteArray*' is ambiguous rpt->loadFromByteArray(byteArray);
-
Все работает, спасибо
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();
А как теперь забрать измененный массив?
-
Ловить все же нужно onSave, а не saveFinished. Поскольку saveFinished летит когда процесс записи закончен.
А как теперь забрать измененный массив?
saveToByteArray();
-
Но при этом открывается окно для сохранения в файл?
-
Если в слоте onSave() вызван метод report->saveToByteArray() то не открывается.
-
У меня так и не получается сохранить массив.
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();
-
Я сегодня вечерком демку сделаю, так проще будет.
-
Вот модифицированный demo_r1. Надеюсь поможет :)
-
Спасибо. Это просто чудо. Все работает.
-
Добрый вечер. Почему то у меня не вызывается сигнал onSave, пересобирать проект пробовал, скачал самую свежую версию. Но не получается(
-
Приветствую!
Сигнал onSave() поменял сигнатуру на onSave(bool& saved) для возможности идентификации факта успешной записи.
В переменную saved нужно передать true в случае успешной записи.
-
Я наверное не совсем понял, как отправить при успешной записи?
connect(report, SIGNAL(onSave(saved)), this, SLOT(slotOnSave()));
-
connect(report, SIGNAL(onSave(bool&)), this, SLOT(slotOnSave(bool&)));
::slotOnSave(bool& saved){
....
saved = true;
}
-
Спасибо. Теперь понятно)