QAbstractModel - 无法使用getItem获取QAbstractModelItem和QModelIndex

时间:2012-07-21 12:33:13

标签: c++ qt

您好我尝试实现自定义QAbstractModel以在QtreeView上使用它。

主要要求是以树QDomNodes存储,以便我可以轻松访问/删除/添加子项。

但是在这种方法中我收到了分段错误

ProjectTreeItem *ProjectTreeModel::getItem(const QModelIndex &index) const
{
    if (index.isValid()) {
         ProjectTreeItem *item = static_cast<ProjectTreeItem*>(index.internalPointer());
         if (item) return item;
     }
     return rootItem;
}

这是整个文件:

http://pastebin.com/HmWZwVmC - projecttreemodel.cpp

http://pastebin.com/4nDXDVX0 - projecttreeitem.cpp

这是我尝试做的事情:

void Ide::slotDeleteItem()
{
    /**
      * ui->projectsView is a QTreeView with setModel(model)
          * model is a ProjectTreeModel
          */
    QItemSelectionModel* sel = ui->projectsView->selectionModel();

    QModelIndexList lst = sel->selectedIndexes();

    QModelIndex ind = lst.at(0);

    ProjectTreeItem* item = model->getItem(ind);

/** SEGFAULT even if getItem is moved to public(default is private) **/
    qDebug() << item->data(Qt::DisplayRole).toString();
/** SEGFAULT **/
    qDebug() << model->data(ind,Qt::DisplayRole);

/** Works and display information correct, but i need to access to ProjectTreeItem **/

    qdebug() << ind.data(Qt::DisplayRole);
}

我不确定“内部指针”的内容是什么,如果有人可以提供帮助,请吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我找到问题的根源,它不是模型问题,我使用QProxyModel来过滤一些节点,并且提供的所有QModelIndex都是无效的。如果要使用selectionModel来获取所选索引,请不要使用QproxyModel。