QTableView с чего данные получает. Если от QSqlQueryModel, то нужно наследоваться от QSqlQueryModel и менять уже там. Вырезки из моей модели, приблизительно показывает как это можно сделать.
mymodel.h
class MyModel : public QSqlQueryModel{
Q_OBJECT
public:
MyModel(QObject *parent = 0);
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
};
//==== Модель Таблицы ====
mymodel.cpp
QVariant DownloadTabModel::data(const QModelIndex &index, int role) const {
QVariant value = QSqlQueryModel::data(index, role); // получили значение определенное
// в базовом классе
switch (role) { // в зависимости от параметра роль:
// Qt::DisplayRole - данные для отображения ячейки таблицы
// Qt::EditRole - данные для режима редактирования
// Qt::TextColorRole - цвет текста
// Qt::TextAlignmentRole - выравнивание
// Qt::FontRole - параметры шрифта
// Qt::BackgroundColorRole - цвет фона ячейки
// Qt::CheckStateRole - отображение QCheckBox
// Qt::SizeHintRole - предпочитаемый размер ячейки
case Qt::TextColorRole: // Цвет текста
// if(index.column() == 1)
// return qVariantFromValue(QColor(Qt::blue));
// else
return value;
case Qt::BackgroundColorRole: { // Цвет фона
if(index.sibling(index.row(), 0).data(Qt::DisplayRole).toString() != QObject::trUtf8("Ок")){
return qVariantFromValue(QColor(240, 180, 180));
}else{
if(QDateTime::fromString(index.sibling(index.row(), 1).data(Qt::DisplayRole).toString(), "dd.MM.yyyy hh:mm").secsTo(QDateTime::currentDateTime()) < 24 * 3600){
return qVariantFromValue(QColor(180, 240, 180));
}else if(QDateTime::fromString(index.sibling(index.row(), 1).data(Qt::DisplayRole).toString(), "dd.MM.yyyy hh:mm").secsTo(QDateTime::currentDateTime()) > 24 * 3600 * 30){
return qVariantFromValue(QColor(240, 240, 180));
}
}
}
return value;
}