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

Author Topic: Bug: ReportEngine крашится, если попытаться его удалить на открытом preview  (Read 8993 times)

DrGluck

  • Newbie
  • *
  • Posts: 20
    • View Profile
Создаём ReportEngine, передаём в него модель, вызываем previewReport. Если попытаться удалить ReportEngine, то приложение крашится. Проявляется в 1.2.1 и 1.3.9 (1.3.1 не пробовал), Qt 4.8.6.
На designReport не проявляется.

Возможно предполагается, что ReportEngine должен использоваться исключительно как синглтон. Но тогда нужен какой-либо признак, что сейчас есть открытый отчёт и функция "закрыть отчёт".

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Предполагалось, что до завершения previewReport, ReportEngine убивать не будут :) 
previewReport() должна забирать управление на себя и возвращать после закрытия диалога.
Странно если это не так.  У Вас ось какая ?
« Last Edit: February 15, 2016, 02:44:40 pm by Arin Alex »

DrGluck

  • Newbie
  • *
  • Posts: 20
    • View Profile
7x64, Qt 4.8.6.
Ситуация с удалением во время показа отчёта получилась случайно. Сгенерировалось событие, закрывающее приложение, и Report Engine удалился и упал в процессе удаления.
Но это, опять-таки, ненормальная ситуация для класса, падать во время delete.
« Last Edit: February 15, 2016, 03:15:49 pm by DrGluck »

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Согласен :) Посмотрим, что там за, что цепляется. 

DrGluck

  • Newbie
  • *
  • Posts: 20
    • View Profile
Повторить ситуацию легко на отдельном маленьком приложении. По нажатию на кнопку создаём ReportEngine, модель и вызываем превью. По таймеру через пару секунд вызываем функцию, которая убивает ReportEngine.

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Ок :) Ломать то, мы завсегда с удовольствием :)

DrGluck

  • Newbie
  • *
  • Posts: 20
    • View Profile
Я, конечно, ещё попроверяю, но похоже баг не починился.

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Странно. Я не наблюдаю падения.
Проверяю следующим образом.
Code: [Select]
void MainWindow::runPreview(){
            QTimer* timer = new QTimer(this);
            connect(timer,SIGNAL(timeout()), this, SLOT(slotOnTimer()));
            timer->start(5000);
            report()->loadFromFile(fileName);
            report()->previewReport();
}
void MainWindow::slotOnTimer()
{
    dynamic_cast<QTimer*>(sender())->stop();
    delete m_report;
    m_report = 0;

}
Окно предпросмотра закрывается, исключения не летят. 

DrGluck

  • Newbie
  • *
  • Posts: 20
    • View Profile
Попробую завтра еще раз проверить, тогда отпишусь как что.

DrGluck

  • Newbie
  • *
  • Posts: 20
    • View Profile
Проверил, действительно баг починился. Это я вчера из дома работал, не разобрался в чем проблема.