我有一个QTreeView,我设置了一个子类DomModel:QAbstractItemModel。每个项目都是一个DomItem,主要处理QDomNode。我将QDomDocument设置为此模型。我想我已经从Qt的一个例子中衍生出了这个系统。Qt QTreeView可编辑DOM模型
它有3列:节点名称为0,属性为1,值为2。
无论如何,我想让这个XML DOM树可编辑。我修改了一些标志,例如Qt :: ItemIsEditable和模型类中的其他一些东西,现在我可以通过双击QTreeView来编辑模型。因为QDomItem具有这个setNodeValue函数,但是我发现item-> node()没有“set”函数。NodeName()和item-> node()。attributes() ),我想,修改第0列和第1列。
所以,现在当我修改第2列时,它可以工作,但是列0和列1在回车时恢复到以前的值。
bool DomModel::setData(const QModelIndex &index, const QVariant &value,
int role)
{
if (role != Qt::EditRole) return false;
DomItem *item = static_cast<DomItem*>(index.internalPointer());
switch (index.column()){
case 0:
// ???
break;
case 1:
// ???
break;
case 2:
item->node().setNodeValue(value.toString()); // This works - QTreeView is updated
break;
}
...
}