У меня есть QTreeView, для которого я установил подкласс DomModel: QAbstractItemModel.Каждый элемент является DomItem, который имеет дело главным образом с QDomNode.Я установил QDomDocument для этой модели.Я думаю, что я получил эту систему из одного из примеров Qt.
В ней 3 столбца: 0 для имени узла, 1 для атрибутов и 2 для значения.
В любом случае, я хотелсделать это дерево XML DOM редактируемым.Я изменил некоторые флаги, такие как Qt :: ItemIsEditable и некоторые другие вещи в классе модели, и теперь я могу редактировать модель с помощью QTreeView, дважды щелкнув.
Для столбца 2 это просто, поскольку QDomItem имеет этот setNodeValueФункция, однако я обнаружил, что нет никаких «set» функций для item-> node (). NodeName () и item-> node (). attribute (), которые, я полагаю, изменили бы столбцы 0 и 1.
Так что теперь, когда я изменяю столбец 2, он работает, однако столбцы 0 и 1 возвращаются к своим предыдущим значениям при нажатии enter.
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;
}
...
}