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 - Dark2011

Pages: [1]
1
Discussion | Обсуждение / Верните память!!!)
« on: October 04, 2017, 04:55:13 PM »
С того момента как вы выпустили 1.4.6 отлично ее пользовал уже месяцев 5, пока в один прекрасный момент (вчера) не пришлось генерить отчет на 1500 страниц. Отчет сгенерился нормально, но закрывалось это все дело минуты 3, при этом пролист страниц был довольно тормозной.
Решил проверить наличие новой версии и вуаля 1.4.7
Все собрал, запустил, сгенерил - все отлично, генериться пролистывается и закрывается быстро, но выжирается памяти просто немеренно (около 1500 страниц - 1Гб). Но фиг с ним выедается - НЕ ОСВОБОЖДАЕТСЯ.

И второе, может я чего не понимаю но setShowProgressDialog(true); не работает. По крайней мере у меня никакого прогресс бара не появляется.

код в студию:

Code: [Select]

namespace report {

typedef QMap<QString, QString> Variables;
typedef QMapIterator<QString, QString> VarsIter;

class reports_printer : public Singleton<reports_printer>
{

private:
    reports_printer() : m_report(nullptr) { ; }
    //
    reports_printer(const reports_printer &) = delete;
    reports_printer& operator = (const reports_printer &) = delete;
    //
    virtual ~reports_printer() { reset_report(); }

public:
    void create_report(QAbstractItemModel* data, QString report_templte, Variables vars = Variables())
    {       
        m_report = new LimeReport::ReportEngine;

        if(data && !report_templte.isEmpty())
        {
            if(vars.isEmpty()) qDebug() << "No variables";
            else
            {
                VarsIter iter(vars);//  vars.begin();
                while(iter.hasNext())
                {
                    iter.next();
                    m_report->dataManager()->setReportVariable(iter.key(), QVariant(iter.value()));
                }
            }

            const QString REPORT_MODEL_NAME = "table_model";
            m_report->dataManager()->addModel(REPORT_MODEL_NAME, data, false);
            if(!m_report->loadFromFile(report_templte))
            {
                qDebug() << "Wrong report template";
                reset_report();
                return;
            }

            if (ref_data::get()->debug_prn())
            {
                m_report->designReport();
            }
            else
            {
                m_report->setPreviewWindowTitle(QObject::tr("Preview"));
                //m_report->createPreviewWidget()->show();
                m_report->setResultEditable(false);
                m_report->setShowProgressDialog(true);
                m_report->previewReport();           
            }
        }
        else
        {
            if(!data)                    qDebug() << "Wrong data: nullptr";
            if(report_templte.isEmpty()) qDebug() << "Wrong report template: path is empty";
        }
        reset_report();
    }

private:
    void reset_report()
    {
        QGuiApplication::restoreOverrideCursor();
        if(m_report) delete m_report;
        m_report = nullptr;
    }

    friend class Singleton<reports_printer>;

private:
    LimeReport::ReportEngine* m_report;
};


} // namespace report


т.е после каждого построения отчета всегда (ну только если откуда -нить exception не вылетит) вызывается reset_report. Но top мне упорно показывает 1 Гиг отожранной памяти.

Спасибо.

2
Собственно не получается изменить толщину линий границ элементов. Устанавливаешь в редакоре элемента - толщина изменяется - рендериш отчет - все оставется по старому, обратно в дизайнейр выходишь - толщина линии (borderLineSize) - сброшена в 0

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

Например есть таблица Водителей. Каждый водитель может быть привязан к опреденной категории маршрутов. Один водитель может быть привязан к разным категориям


Имя Водителя  |  Категория маршрута | Поле 1 | Поле 2 | итд
 Вася Петров          30                               3             3
 Вася Петров          30                              17             4
 Вася Петров          30                               6             1
 Вася Петров          30                               2             4
 Слава Иванов       30                               3             2 
 Слава Иванов       30                               1             2 
 Вася Петров          45                               0             0
 Серега                   45                                0            1
 Серега                   45                                2            1


Хочу сделать такую группировку - сначала по категории, внутри этой категории группировка по всем водителям этой категории - по имени, далее след. категории и т.д.

т.е получается
   30
 Вася Петров
....здесь 4 записи....
 Футер
 Слава Иванов
....здесь 2 записи....
 Футер
    45
 Вася Петров     
....здесь 1 запись....
 Футер
 Серега               
....здесь 2 записи....
 Футер

Делаю это с помощью двух GroupBandHeader и все работает кроме последней выборки - почему то дублируется второй GroupBandHeader и затирает мой GroupBandFooter в этой выборке т.е полчуается вот так (последняя строчка):

  30
 Вася Петров
....здесь 4 записи....
 Футер
 Слава Иванов
....здесь 2 записи....
 Футер
    45
 Вася Петров     
....здесь 1 запись....
 Футер
 Серега               
....здесь 2 записи....
 Серега

По описанию баг может быть непонятен  - смотри вложения (самую последнюю группировку). Также добавляю шаблон...

Спасибо.
 

4
Товарищи. Не могли бы вы добавить перехват собыйтий клавы на esc - для закрытия предварительного просмотра как это было в fastreports? Спасибо!

5
Юзаю LR с Qt 5.7.1, под xubuntu 16.04
Все отл работает. Пришло время деплоя, притащил с собой всякие libQt5Core  и тд включая libQt5PrintSupport.so  и plugins/printsupport/libcupsprintersupport.so, все работает но в списке выборов принтера есть только Save to pdf.
Принер сетевой, из всего чего угодно видится и печатает нормально...
Наверное вопрос немножко не по теме, но наверняка ведь пробовали деплоить это добро на пользовательский ubuntu без Qt - какаие либы и плагины обязательны? или все таки проблема не в этом?

6
Есть разные программные модули - у каждых своя модель...
Есть один синглтон-принтер - внутри которого LimeReport::ReportEngine*;

У этого принтера есть вот такой вот метод

Code: [Select]
  void create_report(QAbstractItemModel* data, QString report_templte)
  {
        if(data && !report_templte.isEmpty())
        {
            const QString REPORT_MODEL_NAME = "table_model";

            if(m_report->dataManager()->containsDatasource(REPORT_MODEL_NAME))
                m_report->dataManager()->removeModel(REPORT_MODEL_NAME);
            m_report->dataManager()->addModel(REPORT_MODEL_NAME, data, true);
            if(!m_report->loadFromFile(report_templte))
            {
                qDebug() << "Wrong report template";
                return;
            }

            int debug_mode = 0;  // TODO we need to get it from global settings object
            if(debug_mode)
            {
                //m_report->setShowProgressDialog(false);
                m_report->designReport();
            }
            else m_report->previewReport();
        }
        else
        {
            if(!data) qDebug() << "Wrong data: nullptr";
            if(report_templte.isEmpty()) qDebug() << "Wrong report template: path is empty";
        }
    }

Печатаю отчет из одного модуля - все ок!
Печатаю из другого - удаляю старую модель       
Code: [Select]
      if(m_report->dataManager()->containsDatasource(REPORT_MODEL_NAME))
                m_report->dataManager()->removeModel(REPORT_MODEL_NAME);

далее устанавливаю новую - падает
Code: [Select]
      m_report->dataManager()->addModel(REPORT_MODEL_NAME, data, true);

Баг или я что то не то делаю?

Версия LM master с github от вчерашнего дня)

7
Добрый день.

Есть табличная модель. В зависимости от данных в одной из колонок должна отображаться та или иная иконка
(если не ноль то галочка если ноль то крестик или ничего)
В приложении эту роль играет делегат. Как подобный функционал осуществить здесь?

Когда я просто устанавливал модель все данные отображаются нормально, но каким образом в IconItem установленной в  DataBand отображать ту или иную иконку в зависимости от значений я не понял - это вообще возможно?... TextItem же я так понял никакую иконку установить тоже не может - это чисто текст;
Code: [Select]
... где то в конструкторе
my_model = new MyTestTableModel(this);
report->dataManager()->addModel("table_model",my_model, true);


Попробовал другим путем (для примера взял QTableWidget) - в slotGetCallbackData в нужной колонки устанавливаю иконку из ресурсов (просто для теста а не из конретного айтема)

Code: [Select]
MainWindow::MainWindow(QWidget *parent) :  QMainWindow(parent),
    ui(new Ui::MainWindow), m_progressDialog(0)
{
    ui->setupUi(this);
    report = new LimeReport::ReportEngine(this);

    connect(report, SIGNAL(renderStarted()), this, SLOT(renderStarted()));
    connect(report, SIGNAL(renderPageFinished(int)),
            this, SLOT(renderPageFinished(int)));
    connect(report, SIGNAL(renderFinished()), this, SLOT(renderFinished()));

    wgt = new QTableWidget(3, 4, this);
    wgt->setItem(0, 0, new QTableWidgetItem("Test1"));
    wgt->setItem(0, 1, new QTableWidgetItem("Test2"));
    wgt->setItem(0, 2, new QTableWidgetItem("Test3"));
    wgt->setItem(0, 3, new QTableWidgetItem("0"));
    .... и тд.

      LimeReport::ICallbackDatasource * callbackDatasource = report->dataManager()->createCallbackDatasouce("table_model");
    connect(callbackDatasource, SIGNAL(getCallbackData(LimeReport::CallbackInfo,QVariant&)),
            this, SLOT(slotGetCallbackData(LimeReport::CallbackInfo,QVariant&)));

    connect(callbackDatasource, SIGNAL(changePos(const LimeReport::CallbackInfo::ChangePosType&,bool&)),
            this, SLOT(slotChangePos(const LimeReport::CallbackInfo::ChangePosType&,bool&)));
}

void MainWindow::slotGetCallbackData(LimeReport::CallbackInfo info, QVariant &data)
{
    if (!wgt) return;
        prepareData(wgt, info, data);
}

void MainWindow::prepareData(QTableWidget* wgt, LimeReport::CallbackInfo info, QVariant &data)
{
    switch (info.dataType)
    {
        case LimeReport::CallbackInfo::ColumnCount:
            data = wgt->columnCount();
            break;
        case LimeReport::CallbackInfo::IsEmpty:
            data = !(wgt->item(0, 0));
            break;
        case LimeReport::CallbackInfo::HasNext:
            //data = true;
            break;
        case LimeReport::CallbackInfo::ColumnHeaderData:
            data = info.index + 1;
            break;
        case LimeReport::CallbackInfo::ColumnData:
        {
            if(current_row != info.index)
            {
                current_row = info.index;
                column_counter = 0;
            }
            else ++column_counter;
            //qDebug() << "Current index: " << info.index;
            QTableWidgetItem* currentItem = wgt->item(current_row, column_counter);
            if(currentItem)
            {
                if(column_counter  != 3)
                    data = currentItem->text();
                else
                {
                    QIcon testIcon(":/images/images/tick.png");
                    data = qVariantFromValue(testIcon);
                    //data = qvariant_cast<QIcon>(testIcon);
                }
            }
            break;
        }
    }
}

Т.е здесь в 4 ой колонке  везде должны устанавливаться иконки с галочкой (она маленька 400 байт);
В DataBand для данной колонки я поставил IconItem где data_source - это table_model c нужной колонкой (см. скриншот)
Опять же все поля корректно отображаются кроме иконки.

Есть ли такой функционал и есть подскажите или лучше дайте примерчик)
Заранее спасибо!








[вложение удалено администратором]

Pages: [1]