来源:http://www.cppblog.com/biao/archive/2009/05/18/83292.html
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();
}