QT QTableView自定义 QAbstractItemModel重写setdata
时间: 2023-12-22 14:02:26 浏览: 138
在自定义 QAbstractItemModel 并使用 QTableView 进行显示时,修改数据的方法与普通 Model 的实现方式类似。需要重写 setData() 函数来实现修改操作。
在实现 setData() 函数时,需要首先根据 QModelIndex 参数获取要修改的数据的行、列和父项信息。然后,根据修改的数据角色(Role)来确定要修改的数据类型,进行数据类型转换并存储新数据。最后,发送 dataChanged() 信号通知 View 更新数据。
下面是一个示例代码:
```C++
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (index.isValid() && role == Qt::EditRole) {
// 获取要修改的数据的行、列和父项信息
int row = index.row();
int col = index.column();
QModelIndex parent = index.parent();
// 根据修改的数据角色确定要修改的数据类型
switch (col) {
case 0:
// 如果是第一列,则修改为新的字符串类型数据
myData[row].name = value.toString();
break;
case 1:
// 如果是第二列,则修改为新的整型数据
myData[row].age = value.toInt();
break;
default:
return false;
}
// 发送 dataChanged() 信号通知 View 更新数据
emit dataChanged(index, index, { role });
return true;
}
return false;
}
```
上述代码中的 myData 是自定义的数据结构,用于存储 Model 中的数据。在实现 setData() 函数时,需要根据具体的数据类型进行处理。同时,还需要在 Model 中实现 data() 函数,用于获取 View 中显示的数据。
阅读全文