逛奔的蜗牛

我不聪明,但我会很努力

   ::  :: 新随笔 ::  ::  :: 管理 ::

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(); 
}
posted on 2009-05-18 17:26 逛奔的蜗牛 阅读(803) 评论(0)  编辑 收藏 引用 所属分类: Qt

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理