LimeReport Forum
General Category | Основное => Discussion | Обсуждение => Topic started by: Tux on November 18, 2025, 10:40:57 pm
-
Доброго времени суток!
Что именно делает сабж? По названию вроде должен показывать что-то типа ProgressDialog, но на деле, что истину в функцию передавай, хоть ложь - на экране ничего не происходит. Ни в винде, ни в линуксе.
Или я что-то просто делаю не так?
-
Хай!
Полозреваю - что не так :o)
Отчет большой?
-
Нет, пока не большой. Пока не понятно, почему после вызова кода
report = new LimeReport::ReportEngine(this);
report->setShowProgressDialog(true);
report->dataManager()->setReportVariable("SerNo", "серийный номер");
// report->loadFromFile("report.lrxml");
report->loadFromFile(":/data/report.lrxml");
report->previewReport();
Ничего визуально на экране не происходит около 10 секунд, а потом отображается сгенерированный отчёт.
По смыслу эта функция вроде как должна отображать процесс генерирования отчета перед его показом, чтобы не создавалась иллюзия "зависания компьютера". Или я что-то не понимаю...
-
Возможно, что отломалось, я гляну что там да как
-
Ну вроде поправил :) Можно забрать и проверить
-
Забрал. Для чистоты эксперимента, снова склонировал репозиторий с гитхаба. Заодно и почти закончил отчёт.
Библиотеки заменил на свежесобранные. Проверяю на 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).
В винде не пробовал, думаю, что там результат будет тем же.
-
А сколько страниц в отчете?
-
Я к тому, что, возможно, я ожидал несколько другого.
По логике (по моей логике) - весь мой код, медленно что-то делает, подготавливает, генерирует отчёт и потом уже показывает результат.
А тут, похоже, что просто показывается время "загрузки" функции previewReport.
При таком раскладе мне проще самостоятельно обернуть всё это в QProgressDialog...
-
А сколько страниц в отчете?
8
-
Показывается процесс рендера страниц, но в случае если данные получаются медленно, индикатор на это время не появится. Поэтому я собственно эту функциональность, видимо, хотел отломать. Можно сесть на сигнал, что страница отредерилась и запилить свой индикатор
-
Данные у меня лежат в простой базе данных, лежащей рядом с исполняемым файлом.
Я может что-то не понимаю, но разве время создания объекта LimeReport::ReportEngine, время на загрузку данных, время на загрузку самого отчёта и подготовка отчёта - это не то время, во время которого клиент должен просто ждать? Отчёт часто всего один и программист вряд ли будет предварительно всё это загружать, чтобы затем, при нажатии кнопки "показать отчёт" вызвать единственную функцию previewReport.
Хотя, может быть я и заблуждаюсь...
-
Сценариев использования огромное количество :) и как раз, создание одного экземпляра reportengine и закидывания в него различных отчетов, совсем не редкость. Поэтому если надо реализовать индикатор, который оборачивает весь процесс от создания отчета до его вывода, лучше это сделать самостоятельно.