News: LimeReport new version 1.5 has been released
Вышла новая версия LimeReport 1.5

Author Topic: Что делает функция setShowProgressDialog?  (Read 1241 times)

Tux

  • Newbie
  • *
  • Posts: 17
    • View Profile
Что делает функция setShowProgressDialog?
« on: November 18, 2025, 10:40:57 pm »
Доброго времени суток!
Что именно делает сабж? По названию вроде должен показывать что-то типа ProgressDialog,  но на деле, что истину в функцию передавай, хоть ложь - на экране ничего не происходит. Ни в винде, ни в линуксе.
Или я что-то просто делаю не так?

Subst

  • Sr. Member
  • ****
  • Posts: 464
    • View Profile
Re: Что делает функция setShowProgressDialog?
« Reply #1 on: November 19, 2025, 05:22:44 am »
Хай!
Полозреваю - что не так :o)

Отчет большой?

Tux

  • Newbie
  • *
  • Posts: 17
    • View Profile
Re: Что делает функция setShowProgressDialog?
« Reply #2 on: November 19, 2025, 11:11:01 am »
Нет, пока не большой. Пока не понятно, почему после вызова кода
    report = new LimeReport::ReportEngine(this);
    report->setShowProgressDialog(true);
    report->dataManager()->setReportVariable("SerNo", "серийный номер");
    // report->loadFromFile("report.lrxml");
    report->loadFromFile(":/data/report.lrxml");
    report->previewReport();
Ничего визуально на экране не происходит около 10 секунд, а потом отображается сгенерированный отчёт.
По смыслу эта функция вроде как должна отображать процесс генерирования отчета перед его показом, чтобы не создавалась иллюзия "зависания компьютера". Или я что-то не понимаю...

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1019
    • View Profile
Re: Что делает функция setShowProgressDialog?
« Reply #3 on: November 20, 2025, 09:48:21 pm »
Возможно, что отломалось, я гляну что там да как

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1019
    • View Profile
Re: Что делает функция setShowProgressDialog?
« Reply #4 on: November 21, 2025, 07:41:35 pm »
Ну вроде поправил :) Можно забрать и проверить

Tux

  • Newbie
  • *
  • Posts: 17
    • View Profile
Re: Что делает функция setShowProgressDialog?
« Reply #5 on: November 21, 2025, 09:11:22 pm »
Забрал. Для чистоты эксперимента, снова склонировал репозиторий с гитхаба. Заодно и почти закончил отчёт.
Библиотеки заменил на свежесобранные. Проверяю на linux.
Полный код проверки.
    QElapsedTimer timer;
    timer.start();

    report = new LimeReport::ReportEngine(this);
    report->setShowProgressDialog(true);
    report->dataManager()->setReportVariable("SerNo", "серийный номер");
    // report->loadFromFile("report.lrxml");
    report->loadFromFile(":/data/report.lrxml");
    emit info(QString("Прошло времени %1 msec").arg(timer.elapsed()));
    report->previewReport();

Результат
Прошло времени 18021 msec
Что-то типа QProgressDialog появляется непосредственно перед отображением окна отчета (буквально моргает на 100-200 msec).
В винде не пробовал, думаю, что там результат будет тем же.

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1019
    • View Profile
Re: Что делает функция setShowProgressDialog?
« Reply #6 on: November 21, 2025, 09:25:21 pm »
А сколько страниц в отчете?

Tux

  • Newbie
  • *
  • Posts: 17
    • View Profile
Re: Что делает функция setShowProgressDialog?
« Reply #7 on: November 21, 2025, 09:29:51 pm »
Я к тому, что, возможно, я ожидал несколько другого.
По логике (по моей логике) - весь мой код, медленно что-то делает, подготавливает, генерирует отчёт и потом уже показывает результат.
А тут, похоже, что просто показывается время "загрузки" функции previewReport.
При таком раскладе мне проще самостоятельно обернуть всё это в QProgressDialog...

Tux

  • Newbie
  • *
  • Posts: 17
    • View Profile
Re: Что делает функция setShowProgressDialog?
« Reply #8 on: November 21, 2025, 09:30:13 pm »
А сколько страниц в отчете?
8

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1019
    • View Profile
Re: Что делает функция setShowProgressDialog?
« Reply #9 on: November 21, 2025, 09:37:16 pm »
Показывается процесс рендера страниц, но в случае если данные получаются медленно, индикатор на это время не появится. Поэтому я собственно эту функциональность, видимо, хотел отломать. Можно сесть на сигнал, что страница отредерилась и запилить свой индикатор

Tux

  • Newbie
  • *
  • Posts: 17
    • View Profile
Re: Что делает функция setShowProgressDialog?
« Reply #10 on: November 21, 2025, 09:53:51 pm »
Данные у меня лежат в простой базе данных, лежащей рядом с исполняемым файлом.
Я может что-то не понимаю, но разве время создания объекта LimeReport::ReportEngine, время на загрузку данных, время на загрузку самого отчёта и подготовка отчёта - это не то время, во время которого клиент должен просто ждать? Отчёт часто всего один и программист вряд ли будет предварительно всё это загружать, чтобы затем, при нажатии кнопки "показать отчёт" вызвать единственную функцию previewReport.
Хотя, может быть я и заблуждаюсь...

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1019
    • View Profile
Re: Что делает функция setShowProgressDialog?
« Reply #11 on: November 21, 2025, 10:54:58 pm »
Сценариев использования огромное количество :) и как раз, создание одного экземпляра reportengine и закидывания в него различных отчетов, совсем не редкость. Поэтому если надо реализовать индикатор, который оборачивает весь процесс от создания отчета до его вывода, лучше это сделать самостоятельно.