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

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - Subst

Pages: 1 [2]
16
Discussion | Обсуждение / проблема с DataS
« on: April 13, 2016, 05:13:16 PM »
У меня проблема следующая:

m_report->dataManager()->addModel(...) замечательно работает. Но до тех пор, пока я не сделаю локализацию, после этого
в списке полей отчета пропадает оригинально название поля, но появляется локализованное.

скажем поле city. В программе код setHeaderData(fieldIndex("city"),tr("City"));

Вот в limeReport и отображается как tr("City"), если в локализации Это "Город", то и будет Город. Крайне неудобно и похоже на баг (ну или фичу, если угодно :) ).

т.е. сделал отчет, локализовал программу - отчет заново творить. Сделал перевод на иной язык - отчет заново творить.

Копаю исходники, смотрю, где вместо fieldName подставляется headerName...

P.S. не исключено, что корни проблеммы одни, что описал drow в предыдущем топике

17
Discussion | Обсуждение / renderPageFinished(int)
« on: April 07, 2016, 05:40:17 AM »
Доброго времени суток опять!

при попытке отследить процесс рендеринга, обнаружил проблему в сигнале renderPageFinished(int):

кол-во завершенных страниц всегда на 1 больше реального. Ну, как уже принято, покопался.

файл lrrenderengine.cpp, строки 546-547

    connect(m_reportRender.data(),SIGNAL(pageRendered(int)),
            this, SIGNAL(renderPageFinished(int)));

далее:

файл lrreportrender.cpp, строки 966-978:

   if (m_ranges.last().lastPage==0 && m_ranges.count()>1) {
        m_datasources->setReportVariable("#PAGE",1);
    } else {
        m_datasources->setReportVariable("#PAGE",m_datasources->variable("#PAGE").toInt()+1);
    }

    m_ranges.last().lastPage = m_pageCount;
    m_pageCount++;

    BandDesignIntf* pageFooter = m_renderPageItem->bandByType(BandDesignIntf::PageFooter);
    if (pageFooter) pageFooter->setBandIndex(++m_currentIndex);
    m_renderedPages.append(PageItemDesignIntf::Ptr(m_renderPageItem));
    emit pageRendered(m_pageCount)

мне все же видится, что увеличить m_pageCount надо после emit pageRendered(m_pageCount)

P.S. вносить изменения и пересобирать еще не пробовал,





18
Discussion | Обсуждение / CalBack и RowCount
« on: April 06, 2016, 05:46:59 AM »
Вчера собрал последние исходники. Обнаружил баг следующий:

при повторном вызове, например, previewReport происходит следующее:

getCallbackData(LimeReport::CallbackInfo info, QVariant &value) с параметром RowCount не вызывается. Что может привести как к крешу, так и не верному отображению информации в силу факта, что данные могли поменяться, а rowCount останется прежним.

Поковырял исходники. в lrdatadesignintf.cpp
в строке 615 стоит условие для обновления rowCount

if (m_rowCount == -1)

не может ли здесь собака порыться? мне кажется это условие и будет гарантировать запрос rowCount Только один раз.

19
Discussion | Обсуждение / LimeReport & 64 bit
« on: March 25, 2016, 06:56:13 AM »
При сборке на 64-х битной платформе компилятором MinGW 64 сборка вываливается. После просмотра и некоторого изучения кода баг обнаружен следующий:

Последние исходники с GIT от 24.03.2016, файл lrreportrender.cpp

строка 555
m_popupedValues.insert(QString::number((long)dataBand,16)+'|'+gf->data(), gf->values()[gf->values().count()-1]);

строка 571
gf->values().push_back(m_popupedValues.value(QString::number((long)dataBand,16)+'|'+gf->data()));

В 64-х битных системах (long)dataBand - вызовет ошибку, long - 32-х битная величина, указатель в 64-х битных системах - 64-х битная величина.

Исправляется путем преобразования не в long, а в long long, т.е.

строка 555
m_popupedValues.insert(QString::number((long long)dataBand,16)+'|'+gf->data(), gf->values()[gf->values().count()-1]);

строка 571
gf->values().push_back(m_popupedValues.value(QString::number((long long)dataBand,16)+'|'+gf->data()));

P.S. Может кому пригодится

Pages: 1 [2]