1

QTreeViewと2つのQSortFilterProxyModelベースのフィルターを使用しています。

QTreeViewに現在表示されているアイテムのリストを取得する必要があるため、選択したインデックスを取得し(-> selectionModel()-> selectedIndexes()を使用)、それらを単純な再帰関数に渡しますが、常にSIGSEGVを取得します。デバッグ時に、呼び出しスタックが終了する場所を見つけました— QVector::fillのどこかにあります。

多分私は何か間違ったことをしているのですか?インデックスを通過するmapToSource()と、表示されたアイテムだけでなく、すべてのアイテムが取得されます。

イテレータ関数は単純です。

void CollectionTreeWidget::iterator(const QModelIndex & index, QModelIndexList & items)
{
    int count = p->dateFilterProxy->rowCount(index);
    for (int i=0; i<count; i++) {
        QModelIndex t = index.child(i, 0);
        iterator(t, items);
    }
}

これは、 QTreeViewdateFilterProxyモデルとして使用されるモデルです。呼び出し時にコードがクラッシュしrowCountます。

4

1 に答える 1

1

上記のアルゴリズムにエラーが見つかったと思います。セグメンテーション違反を排除するために、インデックスリーブのサブインデックス(つまり、子のないノード)をカウントしてはなりません。

于 2012-08-15T05:35:52.220 に答える