手机版

Qt ModelView 学习笔记(11)

发布时间:2021-06-08   来源:未知    
字号:

qt相关资料

bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);

让model可编辑

delegate会在创建编辑器之前检查数据项是否是可编辑的。model必须得让delegate知道它的数据项是可

编辑的。这可以通过为每一个数据项返回一个正确的标记得到,在本例中,我们假设所有的数据项都是

可编辑可选择的:

Qt::ItemFlags StringListModel::flags(const QModelIndex &index) const {

if (!index.isValid())

return Qt::ItemIsEnabled;

return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; }

我们不必知道delegate执行怎样实际的编辑处理过程,我们只需提供给

delegate一个方法,delegate会使用它对model中的数据进行设置。这个特殊的函数就是setData():

bool StringListModel::setData(const QModelIndex &index,

const QVariant &value, int role) {

if (index.isValid() && role == Qt::EditRole) {

stringList.replace(index.row(), value.toString());

emit dataChanged(index, index);

return true;

}

return false;

}

当数据被设置后,model必须得让views知道一些数据发生了变化,这可通过发射一个dataChanged() 信号实现。

因为只有一个数据项发生了变化,因此在信号中说明的变化范围只限于一个model index。

插入,删除行

在model中改变行数与列数是可能的。当然在本列中,只考虑行的情况,我们只需要重新实现插入、删除

的函数就可以了,下面应在类定义中声明:

bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex());

bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex());

既然model中的每行对应于列表中的一个string,因此,insertRows()函数在string list 中指定位置插入一个空string,

父index通常用于决定model中行列的位置,本例中只有一个单独的顶级项,困此只需要在list中插入空string。

Qt ModelView 学习笔记(11).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)