Добрый день.
Есть табличная модель. В зависимости от данных в одной из колонок должна отображаться та или иная иконка
(если не ноль то галочка если ноль то крестик или ничего)
В приложении эту роль играет делегат. Как подобный функционал осуществить здесь?
Когда я просто устанавливал модель все данные отображаются нормально, но каким образом в IconItem установленной в DataBand отображать ту или иную иконку в зависимости от значений я не понял - это вообще возможно?... TextItem же я так понял никакую иконку установить тоже не может - это чисто текст;
... где то в конструкторе
my_model = new MyTestTableModel(this);
report->dataManager()->addModel("table_model",my_model, true);
Попробовал другим путем (для примера взял QTableWidget) - в slotGetCallbackData в нужной колонки устанавливаю иконку из ресурсов (просто для теста а не из конретного айтема)
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 нужной колонкой (см. скриншот)
Опять же все поля корректно отображаются кроме иконки.
Есть ли такой функционал и есть подскажите или лучше дайте примерчик)
Заранее спасибо!
[вложение удалено администратором]