QFileSystemModel を使用して、QTreView を介してファイル構造を表しています。すべて正常に動作しますが、ツリーのあるレベルに行を追加する必要があります。たとえば、今のところは次のとおりです。
-根
--row1
--row2
--row3
これらすべての行は、ファイル システムからフォルダー/ファイルをマッピングします。私は欲しい:
-根
--row1
--row2
--row3
--カスタム行
そのため、カスタム行はファイル システムからのデータを表していません。ここに自分のデータを追加するだけです。私はインターネットから多くのものを読み、プロキシモデルを使用してrowCount()、data()、およびflags()関数を再実装するよう人々にアドバイスしました。私はそれをやろうとしました(QSortFilterProxyModelから派生したクラスを使用しました)が、data()およびflags()関数で行を取得できませんでした。ソースモデルから数がかかるようです。
QVariant AddonFilterModel::data (const QModelIndex & index, int role) const
{
if(role == Qt::DisplayRole && index.row() == FilterModel::rowCount(index))
{
return QString("Add-Ons");
}
return FilterModel::data(index, role);
}
Qt::ItemFlags AddonFilterModel::flags(const QModelIndex & index) const
{
if (!index.isValid())
return 0;
if (index.row() == FilterModel::rowCount(index))
{
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
return FilterModel::flags(index);
}
int AddonFilterModel::rowCount(const QModelIndex &parent) const
{
int count = FilterModel::rowCount(parent);
if(parent == this->getRootIndex())
{
return count+1;
}
return count;
}
QSortFilterProxyModel() のフィルタリング関数が必要なため、QAbstractProxyModel から派生したクラスを使用することはできません。
また、QFileSystemModel の rowCount() を再実装してモデルを直接変更しようとしましたが、QT コードから「範囲外の配列」エラーが発生しています。
insertRow() メソッドを試しましたが、機能しません。QFileSystemModel が読み取り専用だからだと思います。
誰かがこの問題に直面しましたか? 何か案は?