Для решения поставленной задачи отнаследуемся от класса QIdentityProxyModel:
#include <QDialog>
#include <QSqlQueryModel>
#include <QIdentityProxyModel>
class ColorCell : public QIdentityProxyModel
{
public:
ColorCell() {}
protected:
virtual QVariant data(const QModelIndex &index, int role) const;
};
class myClass: public QDialog {
....
private slots:
void updateModel();
private:
QSqlQueryModel *model;
ColorCell *colorCellModel;
}
Переопределим функцию data:
QVariant ColorCell::data(const QModelIndex &index, int role) const
{
//изменение цвета текста на красный в 0-ой колонке
if (role == Qt::ForegroundRole) {
if (index.column() == 0)
return QBrush(Qt::red);
}
//изменение цвета фона всей строки по значению в ячейке 4-ой колонки
if (role == Qt::BackgroundRole) {
if(!index.model()->data(
index.model()->index(index.row(), 4),
Qt::DisplayRole).toBool())
return QBrush(Qt::green);
else
return QBrush(Qt::blue);
}
return QIdentityProxyModel::data(index, role);
}
Теперь определим для нашей прокси-модели ее модель-источник:
myClass::myClass(QWidget *parent) :
QDialog(parent),
ui(new Ui::Buffer)
{
ui->setupUi(this);
colorCellModel = nullptr;
model = nullptr;
updateModel();
}
void myClass::updateModel() {
if (!model) {
model = new QSqlQueryModel;
colorCellModel = new ColorCell;
ui->tableView->setModel(colorCellModel);
}
model->setQuery(<query text>);
colorCellModel->setSourceModel(model);
}
Установка модели в качестве sourceModel для обработки прокси-моделью
Теперь таблица будет раскрашена в соответствии с заданными условиями.