读书人

QAbstractTableModel中的data()终究执

发布时间: 2012-11-01 11:11:32 作者: rapoo

QAbstractTableModel中的data()到底执行几遍???

有一个问题:QAbstractTableModel中的data()函数到底执行几遍???

?

?

发现问题的过程

?1、一个普通的继承QAbstractTableModel?的类

?

?

class CurrencyModel : public QAbstractTableModel  {  public:      CurrencyModel(QObject *parent = 0);        void setCurrencyMap(const QMap<QString, double> &map);      int rowCount(const QModelIndex &parent) const;      int columnCount(const QModelIndex &parent) const;      QVariant data(const QModelIndex &index, int role) const;      QVariant headerData(int section, Qt::Orientation orientation,                          int role) const;    private:      QString currencyAt(int offset) const;        QMap<QString, double> currencyMap;  };  

?

?

?2、其中的重载的data()函数如下:

?

//返回一个项的任意角色的值,这个项被指定为QModelIndexQVariant MoReconQueue::data(const QModelIndex &index, int role) const{qDebug() <<"role:"<< role<< "index : " << index.row() << index.column();    //模型索引无效,返回空值    if (!index.isValid())        return QVariant();    //对其角色    if (role == Qt::TextAlignmentRole)    {        return int(Qt::AlignRight | Qt::AlignVCenter);    }    //显示角色    else if (role == Qt::DisplayRole)    {        return reconQueueAt(index.row(),index.column());    }    //返回空值    return QVariant();}
?

?

3、测试结果:

发现data()执行了3次遍历,每次遍历都执行每一行每一项的七个角色的赋值。

?

?

?

?

读书人网 >编程

热点推荐