サブクラス化されたDomModel:QAbstractItemModelを設定するQTreeViewがあります。各アイテムは、主にQDomNodeを処理するDomItemです。QDomDocumentをこのモデルに設定しました。このシステムは、Qtの例の1つから派生したと思います。
3つの列があります。0はノード名、1は属性、2は値です。
とにかく、私はこのXMLDOMツリーを編集可能にしたかったのです。Qt :: ItemIsEditableやモデルクラスの他のいくつかのフラグを変更しました。これで、ダブルクリックしてQTreeViewからモデルを編集できます。
列2の場合、QDomItemにはこのsetNodeValue関数があるため簡単ですが、item-> node()。NodeName()およびitem-> node()。attributes()には「set」関数がないことがわかりました。私は、列0と1を変更すると推測します。
したがって、列2を変更すると機能しますが、Enterキーを押すと、列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;
}
...
}