andを使用してカスタム リストを作成したいQListView
ので、 を拡張しQListView
、特定のメソッドを とともに実装する必要がありました。一見すると画面に正しく表示されますが、リスト モデルにデータを入力した後に問題が発生します。関数は、異なる役割を持つ項目モデルごとに 4 ~ 5 回呼び出されます(一部は未定義の役割/範囲外/おそらくランダムです)。リストモデルの初期化後だけではありません!リスト要素にカーソルを合わせると、ビューは正しいインデックスとロールで data(index,role)を呼び出しますが、直後に予期しないロール値で再度呼び出されます。QItemDelegate
QAbstractListModel
QAbstractItemModel::data(const QModelIndex & index, int role = Qt::DisplayRole) const
data(index,role)
挙動不審のようです。奇妙な電話の発信元を見つけることができませんでした。カスタム クラスのすべてのメソッドにログを記録して、間違った値でメソッドを誤って呼び出しないようにdata(index,role)
しています。
どこを見ればいいのか、なぜこの奇妙な呼び出しが発生するのか、誰か考えがありますか?
編集 「奇妙な」呼び出しのソースは次のとおりです。
QSize CDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const
{
return QSize(QItemDelegate::sizeHint(option, index));
}
どういうわけかそれを呼び出すと、異なるロール値QItemDelegate::sizeHint()
でトリガーされます。data()
私の場合、0(0,1,2,3) から始まるロール値を定義しました。@Jens によると、これらの値は予約されています。カスタムロールの開始値を変更すると、問題が解決しました。