LimeReport Forum

General Category | Основное => Discussion | Обсуждение => Topic started by: Tux on November 18, 2025, 10:40:57 pm

Title: Что делает функция setShowProgressDialog?
Post by: Tux on November 18, 2025, 10:40:57 pm
Доброго времени суток!
Что именно делает сабж? По названию вроде должен показывать что-то типа ProgressDialog,  но на деле, что истину в функцию передавай, хоть ложь - на экране ничего не происходит. Ни в винде, ни в линуксе.
Или я что-то просто делаю не так?
Title: Re: Что делает функция setShowProgressDialog?
Post by: Subst on November 19, 2025, 05:22:44 am
Хай!
Полозреваю - что не так :o)

Отчет большой?
Title: Re: Что делает функция setShowProgressDialog?
Post by: Tux 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 секунд, а потом отображается сгенерированный отчёт.
По смыслу эта функция вроде как должна отображать процесс генерирования отчета перед его показом, чтобы не создавалась иллюзия "зависания компьютера". Или я что-то не понимаю...
Title: Re: Что делает функция setShowProgressDialog?
Post by: Arin Alex on November 20, 2025, 09:48:21 pm
Возможно, что отломалось, я гляну что там да как
Title: Re: Что делает функция setShowProgressDialog?
Post by: Arin Alex on November 21, 2025, 07:41:35 pm
Ну вроде поправил :) Можно забрать и проверить
Title: Re: Что делает функция setShowProgressDialog?
Post by: Tux 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).
В винде не пробовал, думаю, что там результат будет тем же.
Title: Re: Что делает функция setShowProgressDialog?
Post by: Arin Alex on November 21, 2025, 09:25:21 pm
А сколько страниц в отчете?
Title: Re: Что делает функция setShowProgressDialog?
Post by: Tux on November 21, 2025, 09:29:51 pm
Я к тому, что, возможно, я ожидал несколько другого.
По логике (по моей логике) - весь мой код, медленно что-то делает, подготавливает, генерирует отчёт и потом уже показывает результат.
А тут, похоже, что просто показывается время "загрузки" функции previewReport.
При таком раскладе мне проще самостоятельно обернуть всё это в QProgressDialog...
Title: Re: Что делает функция setShowProgressDialog?
Post by: Tux on November 21, 2025, 09:30:13 pm
А сколько страниц в отчете?
8
Title: Re: Что делает функция setShowProgressDialog?
Post by: Arin Alex on November 21, 2025, 09:37:16 pm
Показывается процесс рендера страниц, но в случае если данные получаются медленно, индикатор на это время не появится. Поэтому я собственно эту функциональность, видимо, хотел отломать. Можно сесть на сигнал, что страница отредерилась и запилить свой индикатор
Title: Re: Что делает функция setShowProgressDialog?
Post by: Tux on November 21, 2025, 09:53:51 pm
Данные у меня лежат в простой базе данных, лежащей рядом с исполняемым файлом.
Я может что-то не понимаю, но разве время создания объекта LimeReport::ReportEngine, время на загрузку данных, время на загрузку самого отчёта и подготовка отчёта - это не то время, во время которого клиент должен просто ждать? Отчёт часто всего один и программист вряд ли будет предварительно всё это загружать, чтобы затем, при нажатии кнопки "показать отчёт" вызвать единственную функцию previewReport.
Хотя, может быть я и заблуждаюсь...
Title: Re: Что делает функция setShowProgressDialog?
Post by: Arin Alex on November 21, 2025, 10:54:58 pm
Сценариев использования огромное количество :) и как раз, создание одного экземпляра reportengine и закидывания в него различных отчетов, совсем не редкость. Поэтому если надо реализовать индикатор, который оборачивает весь процесс от создания отчета до его вывода, лучше это сделать самостоятельно.