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

Author Topic: Сохранение шаблона отчета в базу данных  (Read 6248 times)

yurii

  • Newbie
  • *
  • Posts: 46
    • View Profile
Шаблоны отчетов сохраняю в БД QByteArray, но теперь нужно их редактировать. Как получить сигнал на сохранение из дизайнера?

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
yurii
сигнал onSave() у ReportEngine.

yurii

  • Newbie
  • *
  • Posts: 46
    • View Profile

connect(LimeReport::ReportEngine, &LimeReport::ReportEngine::onSave, this,  &Report::UpdateReport);

yurii

  • Newbie
  • *
  • Posts: 46
    • View Profile
Как правильно получить сигнал?

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Я имел ввиду сигнал у экземпляра ReportEngine;
Code: [Select]
LimeReport::ReportEngine* rpt = new LimeReport::ReportEngine();
rpt->loadFromByteArray(source);
connect(rpt, &LimeReport::ReportEngine::onSave, this, &MainWindow::slotOnSave);

yurii

  • Newbie
  • *
  • Posts: 46
    • View Profile
Ошибка
Warning: QMetaObject::Connection>> QObject::connect: signal not found in LimeReport::ReportEngine

yurii

  • Newbie
  • *
  • Posts: 46
    • View Profile
А в loadFromByteArray(source) мы передаем QByteArray byteArray = qry.value("template").toByteArray();?

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
А версия лайма какая?
А если старый синтаксис попробовать?
Code: [Select]

connect(report, SIGNAL(onSave()), this, SLOT(slotOnSave()));

yurii

  • Newbie
  • *
  • Posts: 46
    • View Profile
Пробовал, то же самое. А можно по подробнее описать сам процесс редактирования и сохранения. То есть я беру из БД ByteArray и сразу его передаю в loadFromByteArray(ByteArray). Далее открывается дизайнер и ловлю сигнал на сохранение. Что я должен сохранить?

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Если limereport собирается из develop ветки то там сигнал onSave(bool& saved). Сам процесс довольно прост. Загрузили из массива байт, отредактировали, потом выловили сигнал на сохранение, сохранились в массив байт и пихнули в базу

yurii

  • Newbie
  • *
  • Posts: 46
    • View Profile
У меня ошибка при передачи массива, conversion from 'QByteArray' to 'QByteArray*' is ambiguous rpt->loadFromByteArray(byteArray);

yurii

  • Newbie
  • *
  • Posts: 46
    • View Profile
Все работает, спасибо
   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();

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


Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Ловить все же нужно onSave, а не saveFinished. Поскольку saveFinished летит когда процесс записи закончен.
Quote
А как теперь забрать измененный массив?
saveToByteArray();
 

yurii

  • Newbie
  • *
  • Posts: 46
    • View Profile
Но при этом открывается окно для сохранения в файл?

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Если в слоте onSave() вызван метод report->saveToByteArray() то не открывается.