我有一个 QTreeView,我为其设置了一个子类 DomModel:QAbstractItemModel。每个项目都是一个 DomItem,主要处理 QDomNode。我将 QDomDocument 设置为此模型。我想我是从一个 Qt 示例中派生出这个系统的。
它有 3 列:0 表示节点名称,1 表示属性,2 表示值。
无论如何,我想让这个 XML DOM 树可编辑。我已经修改了一些标志,例如 Qt::ItemIsEditable 和模型类中的其他一些东西,现在我可以通过双击 QTreeView 来编辑模型。
对于第 2 列,这很容易,因为 QDomItem 有这个 setNodeValue 函数,但是我发现 item->node().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;
}
...
}