4

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 が読み取り専用だからだと思います。

誰かがこの問題に直面しましたか? 何か案は?

4

1 に答える 1