In order to change the color of the items in the model you need to reimplement the data function and return the colors you want for theQt::BackgroundColorRole or the Qt::TextColorRole roles. See the documentation:
http://doc.trolltech.com/4.3/qabstractitemmodel.html#data
http://doc.trolltech.com/4.3/qt.html#ItemDataRole-enum
The example below demonstrates how this can be achieved.
Note that you can also reimplement the QItemDelegate::paint() in order to change the color the items in a view. See the following FAQ:
http://trolltech.com/developer/knowledgebase/faq.2007-11-21.7774969370/
#include <QtGui>
class ColorModel : public QAbstractTableModel
{
public:
ColorModel(QObject *parent)
{
QStringList firstRow;
QStringList secondRow;
for (int i = 0; i < 5; i++ ) {
firstRow.insert(i,"Row " + QString::number(i+1));
}
for (int i = 0; i < 5; i++ ) {
secondRow.insert(i,"Row " + QString::number(i+1));
}
stringList << firstRow << secondRow;
}
// Returns the number of rows
int rowCount ( const QModelIndex & parent = QModelIndex() ) const
{
return 2;
}
// Returns the number of columns
int columnCount ( const QModelIndex & parent = QModelIndex() ) const
{
return 5;
}
// Returns an appropriate value for the requested data.
// If the view requests an invalid index or if the role is not
// Qt::DisplayRole, Qt::BackgroundColorRole or QTextColorRole, an invalid variant is returned.
// Any valid index that corresponds to a string for the index's column and row in
// the stringlist is returned for the Qt::DisplayRole
QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const
{
if (!index.isValid())
return QVariant();
if (role == Qt::BackgroundRole) {
if (index.row() == 0)
return QColor(Qt::blue);
else
return QColor(Qt::white);
} else if (role == Qt::DisplayRole) {
QStringList list = (QStringList)stringList.at(index.row());
return list.at(index.column());
} else if (role == Qt::ForegroundRole ) {
if (index.row() == 1)
return QColor(Qt::red);
}
return QVariant();
}
private:
// Each row will consist of a list of strings
QList<QStringList>stringList;
};
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QWidget widget;
QHBoxLayout *layout = new QHBoxLayout(&widget);
QTreeView *treeView = new QTreeView(&widget);
QTableView *tableView = new QTableView(&widget);
ColorModel *model = new ColorModel(tableView);
tableView->setModel(model);
treeView->setModel(model);
layout->addWidget(treeView);
layout->addWidget(tableView);
widget.show();
return app.exec();
}