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

Author Topic: Отображение иконки в DataBand в зависимости от данных модели  (Read 11516 times)

Dark2011

  • Newbie
  • *
  • Posts: 27
    • View Profile
кинь отчет, чет фигня какая-то. Откуда синтакс  еррор
Прикрепил

QtScript собран?
Если да, то следующий вопрос - LM собран с поддержкой Script ?
QtScript собран, LM - без понятия
А версия собрана с гитхаба ? Если да то с какой ветки ?
Версия с sourceforge та что 1.3.11.7z весит 3.5мб :)

Qt 5.7 gcc 4.8.4




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

Subst

  • Sr. Member
  • ****
  • Posts: 444
    • View Profile
table_model откуда? как передаешь?

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Можно саму прогу сюда или в личку ?

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Хотя я думаю дело не в ней :) Поскольку если мой демо пример на моей демке выдает ошибку синтаксиса так дело в скриптовом движке

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Subst, Можешь у себя мою демку запустить ?

Subst

  • Sr. Member
  • ****
  • Posts: 444
    • View Profile
Все в поряке, ошибка синтаксиса возникает при отсутсвии датасорса... потому и спрашиваю, откуда Дарк его берет и как загоняет в отчет

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Subst, Вся проблема в том что Dark2011, написал, что моя демка у него тоже ошибку синтаксиса вызывает.
И потом у Dark2011 отчет работает :) до тех пор пока он скритп не начинает юзать соответственно датасоурс у него в порядке
« Last Edit: November 08, 2016, 06:46:00 PM by Arin Alex »

Subst

  • Sr. Member
  • ****
  • Posts: 444
    • View Profile
Может версия, которую он забрал, еще сырая? Когда ты ее выкладывал и сколько воды утекло уже... месяца 3-4 назад бинарники ты собирал. Вспомни сколько переделал с тех пор

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Subst, Да не, специально сейчас пересобрал версию с SF, именно этих глюков я не наблюдаю.
SF конечно надо обновить :) Я вот просто не пойму толь 1.3.12 запилить на мастере толь уже 1.4 в мастер смержить и выложить на SF
« Last Edit: November 08, 2016, 06:51:16 PM by Arin Alex »

Subst

  • Sr. Member
  • ****
  • Posts: 444
    • View Profile
ну вот я запускаю твой отчет на предосмотр при отсутствии базы... синтакс еррор: паос еррор

очевидно, что дело всего лишь в этом. Видит ли БД LM у Дарка...

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Дарк куда-то пропал :) 
Хотя Дарк писал
Quote
Если просто $D{table_model.4} выводит все правильно (0, 1, 2), а с условием все время в else попадает
$S{
if({$D{table_model.4}}=='0')
"<img src='/home/dark/Pictures/Icons/chip_1.png'>"
else ""
}
Из этого я делаю вывод, что данные проброшены нормально
« Last Edit: November 08, 2016, 07:04:27 PM by Arin Alex »

Subst

  • Sr. Member
  • ****
  • Posts: 444
    • View Profile
Обиделся, что не работает, может? :)

Dark2011

  • Newbie
  • *
  • Posts: 27
    • View Profile
Спокуха:) До компа если доберусь сеня выложу, нет - так с утречка....)
Там весь исходник считай это ваша демо1, тока я там все потер и вместо это QTableWidget заполнил
и юзал его модель.... смотри код первого поста
Ошибка при использовании скрипта, данные из модели доступны
Скачал из гита последнюю версию завтра буду собирать пробовать

Dark2011

  • Newbie
  • *
  • Posts: 27
    • View Profile
Значится так.... Проверял я все это дело с тем что в мастере на гите.
Если данные устанавливать вот так ( пример demo_r1 в конструкторе) :

Code: [Select]
    wgt = new QTableWidget(3, 4);
    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"));
    ........
    и тд
    ........
    report->dataManager()->addModel("table_model",wgt->model(),true);
   
 
то все пучком - скрипт норм работает
скрипт:
Code: [Select]
$S{
if ($D{table_model.4}!="0")
  "<img src='/home/dark2011/workspace/LimeReport/demo_r1/images/tick.png'>"
else
  ""
}

но если делать через сигнально-слотовое соединение вот так:

Code: [Select]
    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&)));

    /*  report->dataManager()->addModel("table_model",wgt->model(),true);  */

и определять слоты slotGetCallbackData и slotChangePos ну и соотв метод prepareData (все из demo_r1)
Code: [Select]
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));
            //data = !ds->first();
            break;
        case LimeReport::CallbackInfo::HasNext:
            //data = true;
            break;
        case LimeReport::CallbackInfo::ColumnHeaderData:
            data = info.index + 1;
            //if (info.index < ds->record().count())
            //    data = ds->record().fieldName(info.index);
            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)
            {
                qDebug() << "Test data: " << currentItem->text();
                data = currentItem->text();
//                if(column_counter  != 3)
//                    data = currentItem->text();
//                else
//                {
//                    QIcon testIcon(":/images/images/tick.png");
//                    data = qVariantFromValue(testIcon);
//                    //data = qvariant_cast<QIcon>(testIcon);
//                }
            }
            break;
        }
    }
}

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

void MainWindow::slotChangePos(const LimeReport::CallbackInfo::ChangePosType &type, bool &result)
{
    if( (type == LimeReport::CallbackInfo::First) && (current_pos != 0) )
        current_pos = 0;

    if( current_pos < wgt->rowCount() )
    {
        result = true;
        current_pos++;
    }
    else result = false;
}
то ресурсы в этом скрипте данных действительно нет т.к теперь даже в else нету данных, хотя если вместо этого написать $D{table_model.4} - это работает
Code: [Select]
$S{
if ($D{table_model.4}=="0")
 "<img src='/home/dark2011/workspace/LimeReport/demo_r1/images/tick.png'>"
else
  $D{table_model.4}
}

сорян за длинные пути к иконкам - так и не посмотрел пока как аттачить ресурсы....
Да и Arin Alex - твоя демка работает когда есть ресур - а когда нет синтакс еррор

в общем в атаче исходники
 





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

Subst

  • Sr. Member
  • ****
  • Posts: 444
    • View Profile
qDebug() << "Test data: " << currentItem->text();

это в консоль кидает?