【问题标题】:Qt QTreeView editable DOM modelQt QTreeView 可编辑 DOM 模型
【发布时间】:2011-11-03 16:59:31
【问题描述】:

我有一个 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;
}
...
}

【问题讨论】:

    标签: xml qt dom qtreeview qtxml


    【解决方案1】:

    嗯,显然item-&gt;node().toElement() 返回一个QDomElement 具有必要的“set”函数并且它可以工作。所以我想我已经找到了一种通过QTreeView 完全修改我的XML DOM 文件的方法。

    这对我有用:

    switch (index.column()){
       case 0: // added
          item->node().toElement().setTagName(value.toString());
          break;
       case 1: // added
          // this shall be modified to account for nonstandard spacings, etc.
          aux = value.toString().trimmed();
          aux.remove("\"");
          attributes.clear();
          attributes = aux.split(" ");
          for(int i = 0; i<attributes.size(); i++){
             item->node().toElement().setAttribute(attributes.at(i).split("=").at(0),
                                                   attributes.at(i).split("=").at(1));
          }
          break;
       case 2: // Left it as it is
          item->node().setNodeValue(value.toString());   // This works - QTreeView is updated
          break;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      相关资源
      最近更新 更多