这时候你就会发现,其实我们在if…else…里面返回的不是一种数据类型,if里面是int,而else里面是QString,这就是QVariant的作用了,也正是“类型擦除”的意思。 剩下的三个函数就很简单了:headerData()返回列名或者行名;setCurrencyMap()用于设置底层的数据源;currencyAt()返回偏移量为offset的键值。 至于调用就很...
parent()函数要返回子节点的父节点的索引,我们要从子节点开始寻找,直到找到父节点的父节点,这样就能定位到父节点,从而得到子节点的位置。而data()函数要返回每个单元格的返回值,经过前面两个例子,我想这个函数已经不会有很大的困难了的。headerData()函数返回列头的名字,同前面一样,这里就不再赘述了。 前面的代码...
int rowCount(const QModelIndex &parent = QModelIndex())const; int columnCount(const QModelIndex &parent = QModelIndex())constQVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole)const; bool setHeaderData(int section, Qt::Orientation orientation,const QVariant &va...
insertRecored(self, data) 1. (3)在表格position行插入记录,如果data参数不传入,根据类型自动生成空记录,如果为日期型,取系统当前时间 insertRow(position, data=[], index=QModelIndex()) 1. (4)删除数据记录,rows为行号列表,可以多行,以self.primaryKey为关键字进行删除 deleteRecored(rows): 1. (5)删除...
QVariant headerData(intsection, Qt::Orientation orientation, introle)const; private: Node *nodeFromIndex(constQModelIndex &index)const; Node *rootNode; }; booleanmodel.cpp BooleanModel::BooleanModel(QObject *parent) : QAbstractItemModel(parent) ...
QVariant CityModel::headerData(intsection, Qt::Orientation orientation,introle)const { if(role == Qt::DisplayRole) { returncities[section]; } returnQVariant(); } boolCityModel::setData(constQModelIndex &index,constQVariant &value,introle) ...
放代码呗,传网盘里,我帮你调试。如果是修改数据的话,不需要重新 new QStandardItem 直接用 ...
2. 自定义QAbstractItemModel类中data和index函数功能 答:我理解他们2个一个是创建数据(index),一个是获取数据(data)。所以模型要对称。data有一路index传参返回QVariant内容。要实现可编辑数据库则需要重写setdata功能。 3. 如何构建数据模型 答:参考simpletreemodel中的setupModelData可以受到启发。仅看simpledommodel...
只读的model 只需要实现rowCount ,data 两个方法, 这里为ListView服务,所以我们继承QAbstractListModel, 如果用TableView的话,可以像PixelDelegate那样使用QAbstractTableModel。 class parserModel : public QAbstractListModel { Q_OBJECT public: parserModel(const QStringList &strings, QObject *parent = 0); ...
QString rowCurrency = headerData(index.row(), Qt::Vertical, Qt::DisplayRole) .toString(); currencyMap.insert(columnCurrency, value.toDouble() * currencyMap.value(rowCurrency)); emit dataChanged(index, index); return true; } return false; ...