1

こんにちは、カスタム 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);
}

「内部ポインター」が何をしているのかわかりません。誰か助けてください。

ありがとう!

4

1 に答える 1

1

モデルの問題ではなく、QProxyModel を使用していくつかのノードをフィルタリングしましたが、提供されたすべての QModelIndex が無効でした。selectionModel を使用して選択したインデックスを取得する場合は、QproxyModel を使用しないでください。

于 2012-07-27T10:40:24.820 に答える