Значится так.... Проверял я все это дело с тем что в мастере на гите.
Если данные устанавливать вот так ( пример demo_r1 в конструкторе) :
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);
то все пучком - скрипт норм работает
скрипт:
$S{
if ($D{table_model.4}!="0")
"<img src='/home/dark2011/workspace/LimeReport/demo_r1/images/tick.png'>"
else
""
}
но если делать через сигнально-слотовое соединение вот так:
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)
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} - это работает
$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 - твоя демка работает когда есть ресур - а когда нет синтакс еррор
в общем в атаче исходники
[вложение удалено администратором]