Для манипуляции с отображением модели переопределяется метод data:
QVariant MyModel::data(const QModelIndex &index, int role) const {
// получаем номера строки и столбца
int Row = index.row();
int Col = index.column();
// отладочные сообщения, если метод вызван
qDebug() << QString("row %1, col %2, role %3").arg(Row).arg(Col).arg(role);
// значение из модели-родителя, тут можно использовать
// Если использовать Qt::DisplayRole - можно прочесть данные
QVariant Value = QSqlQueryModel::data(index, role);
// Альтернативный вариант (проверить!)
QString Data = record(Row).value(Col).toString();
switch(role) {
case Qt::DisplayRole:
if (Row == 0 && Col == 1) return QString("<--left");
if (Row == 1 && Col == 1) return QString("right-->");
return QString("Row %1, Column %2").arg(Row+1).arg(Col+1);
break;
case Qt::FontRole:
if (Row == 0 && Col == 0) { //изменяем шрифт только для ячейки (0,0)
QFont boldFont;
boldFont.setBold(true);
return boldFont;
}
break;
case Qt::BackgroundRole:
if (Row == 1 && Col == 2) { // изменяем фон только для ячейки (1,2)
QBrush redBackground(Qt::red);
return redBackground;
}
break;
case Qt::ForegroundRole:
if (Row == 2 && Col == 2) { // изменяем цвет шрифта только для ячейки (2,2)
return QColor(Qt::red);
}
break;
case Qt::TextAlignmentRole:
if (Row == 1 && Col == 1) { // изменяем выравнивание только для ячейки (1,1)
return Qt::AlignRight + Qt::AlignVCenter;
}
break;
case Qt::CheckStateRole:
if (Row == 1 && Col == 0) { // добавляем чекбокс для ячейки (1,0)
return Qt::Checked;
}
}
}
return QVariant(); // или Value, если оставили роль, переданную аргументом
}
Подробнее о ролях можно прочесть в статье "О типах ролей в моделях"