1

このリストを維持するために使用されるデータを維持するためのQAbstractListModelサブクラス化されたモデルがあります。このデータを 1 時間維持する必要があります。つまり、古いデータはリストから削除されます。これは基本的にFIFOリストです。データを並べ替えるプロキシ モデル (のサブクラス) があります。データが変更されるたびに、プロキシ モデルはインデックスを失い、フィルタリングされていないデータを表示します。以下は、これを行うためのコード スニペットです。QListQDateTimeQSortFilterProxyModel

emit layoutAboutToBeChanged();
beginInsertRows(QModelIndex(), 0, 1); //we are prepending
m_entries.prepend(e);
endInsertRows();
emit layoutChanged();

これで問題は解決したようです。しかし、ビュー ( ) で何かが選択されているとQTreeView、アプリケーションがクラッシュし、これらのエラー メッセージが大量に表示されます。

QSortFilterProxyModel: index from wrong model passed to mapFromSource 
QSortFilterProxyModel: index from wrong model passed to mapFromSource 
QSortFilterProxyModel: index from wrong model passed to mapFromSource

デバッガーのスタック トレースは、mouseSelectEventおよび を必要とする他の関数を示しますQModelIndex

長い質問で申し訳ありません。誰かがこの問題を解決するのを手伝ってくれませんか?

ありがとう。

4

1 に答える 1

0

beginInsertRows のドキュメントには、void QAbstractItemModel::beginInsertRows(const QModelIndex & parent, int first, int last)最初に 1 つの項目パラメーターのみを挿入すると、最初 = 最後 = 0 になるm_entries.prepend(e)ことが示されていますbeginInsertRows(QModelIndex(), 0, 1);。そしてそれが2番目のものを求めるとき - ブーム!アクセス違反。必要なのはbeginInsertRows(QModelIndex(), 0, 0);. また、必要はないと思いますがemit layoutAboutToBeChanged()emit layoutChanged();それについてはわかりません。

于 2014-09-10T10:35:05.103 に答える