QAbstractModelItem から継承したカスタム階層モデルがあります。また、QSortFilterProxyModel からサブクラス化された MySortFilterProxyModel を実装します。MySortFilterProxyModel は、列を削除および交換できます。MySortFilterProxyModel の最初の列がモデルの最初の列に対応する場合、すべて正常に動作します。しかし、プロキシ モデルでスワップされた場合、ビューにいくつかの問題があります。しかし、展開しようとすると、子アイテムは表示されません。MySortFilterProxyModel メソッドの一部を次に示します。
bool MySortFilterProxyModel::hasChildren(const QModelIndex &parent) const
{
if (parent.isValid() && parent.column() != 0)
return false;
QModelIndex source_parent = mapToSource(parent);
return sourceModel()->hasChildren( source_parent.sibling(source_parent.row(), 0) );
}
int MySortFilterProxyModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid() && parent.column() != 0)
return 0;
QModelIndex source_parent = mapToSource(parent);
return sourceModel()->rowCount( source_parent.sibling(source_parent.row(), 0) );
}
デバッグ中に、 MySortFilterProxyModel::rowCount が正しいデータを返すことがわかりました。しかし、MyModel::rowCount は MySortFilterProxyModel::rowCount ではなく、QSortFilterProxyModel::index() から呼び出されることにも気付きました。それが問題なのですか?
したがって、特定の質問は、階層モデルで列を交換およびスイッチオフするためのプロキシモデルを実装する正しい方法は何ですか?
問題を解決するために私を助けてください。ありがとうございました。