1

内にファイルシステムを表示する必要があるQtアプリに取り組んでいQtreeviewます。基本的に私の考えは、リムーバブルドライブが1つのセクションの下にあり、ローカルドライブが別のセクションの下にあるようにファイルシステムをカスタマイズすることです。使っQFSFileEngineてやってみましたが、ある程度は成功しています。コードは次のとおりです。

pSystemSecondaryModel = new QFileSystemModel(this);
pSystemSecondaryModel->setRootPath(QDir::currentPath());

list = QFSFileEngine::drives();
for(int i = 0; i < list.size(); i++)
{
    qDebug() << list.at(i).absoluteDir();
}

m_model = new QStandardItemModel(0,0);

QList<QStandardItem *> LocalItem;
LocalItem.insert(0,new QStandardItem("Local Drives"));
LocalItem.at(0)->setEditable(false);
m_model->insertRow(0,LocalItem);

QList<QStandardItem *> RemovableItem;
RemovableItem.insert(0,new QStandardItem("Removable Drives"));
RemovableItem.at(0)->setEditable(false);
m_model->insertRow(1,RemovableItem);

for (int i = 0; i < list.count(); i++)
{
    QString str = list.at(i).absolutePath();
    Localchild = new QStandardItem(str);
    QStandardItem* LocalparentItem = m_model->item(0,0);
    Localchild->setEditable(false);
    LocalparentItem->appendRow(Localchild);
}

QStandardItem* Removablechild = new QStandardItem();
QStandardItem* RemovableparentItem = m_model->item(1,0);
Removablechild->setEditable(false);
RemovableparentItem->appendRow(Removablechild);
ui->PrimTreeView->setModel(m_model);

アプリを実行すると、ローカルドライブとリムーバブルドライブのルートノードが表示されます。ローカルドライブノードの下に、すべてのC:D:E:などが子として表示されますが、リムーバブルドライブは空、つまり子がないように見えます。現在の出力であるシナリオは次のとおりです。

- Local Drives
   C:/
   D:/
   E:/

- Removable Drives

しかし、各ドライブをクリックすると、サブディレクトリがまったく表示されません。理想的には、C:/をクリックするとWindowsProgram Filesフォルダなどが表示されるはずです。完全に空です。どうすればそれを達成できますか?助けてください

4

2 に答える 2

2

ご存知かもしれませんが、あなたは自分のQFileSystemModelをまったく使用しておらず、QStandardItemModel検索した手動エントリをに入力するだけです。

ファイルシステムリストのカスタムグループを表示することが目標である場合は、 QFileSystemModel各ドライブにルートを設定して、複数のインスタンスを使用してみてください。したがって、引き続き最上位のドライブをセットアップしますが、これらのドライブごとに、そのルートにモデルを設定する必要がある場合があります。次に、それらのアイテムとそれらのプライベートモデルの間にマップを作成します。

次に、これらのドライブのモデルをチェックインするために、おそらくindex、hasChildren、rowCount、columnCount、およびその他の読み取り専用メソッドを再実装する必要があります。したがって、たとえばモデルC:/に子があるかどうかを知る必要がある場合はhasChildren()、そのインデックスの非表示C:/ルートモデルへのマッピングを検索し、そのモデルで子カウントを実行する必要があります。

もう1つの方法は、を使用する代わりに、サブクラスQStandardItemModel(またはQAbstractItemModel)を作成して、ファイルシステムのリストを自分で作成することQFileSystemModelです。これにより、カテゴリである固定ルートアイテムとドライブ文字を設定し、リストが展開または折りたたまれているときにリストを確認できます。繰り返しになりますが、これにはモデルのサブクラス化が必要になりますが、これは必ずしも初心者向けの優れた経験とは限りません。

于 2012-12-14T17:55:47.403 に答える
0

あなたの質問を誤解していたらすみませんが、あなたはこれに似たものを探していると思います

于 2013-01-18T23:38:03.863 に答える