2

QFileSystemModelの再実装によって作成されたQTreeViewがあります。私の知る限り、QFileSystemModelはrootPathにQFileSystemWatcherをインストールします。私がやろうとしているのは、rootPathでファイルが直接削除されているときにプログラムで通知することですが、その情報を提供する再実装された関数のシグナルが見つかりませんでした。

私のアプリケーションはftp接続を介していくつかのファイルをアップロードし、ファイルが完全にアップロードされたらその場所からファイルを削除します。そのため、ファイルが直接削除されたときにQFileSystemModelの再実装から通知が必要です(removeメソッドなどからではありません)。

あなたが私を助けてくれることを願っています。ウェブでたくさん検索しましたが、何も見つかりません。

乾杯。

4

1 に答える 1

3

FileSystemModelrowsAboutToBeRemovedシグナル(から継承)を使用できますQAbstractItemModel

モデルから行が削除されるたびに発生します。、およびパラメーターを使用するとparent、ファイル名(子の列0)を取得できます。startend

サンプルコード:

// once you have your model set up:
...
QObject::connect(model, SIGNAL(rowsAboutToBeRemoved(const QModelIndex&, int, int)),
         receiver, SLOT(toBeRemoved(const QModelIndex&, int, int)));
...
// in receiver class:
public slots:
 void toBeRemoved(const QModelIndex &parent, int start, int end) {
  std::cout << start << " -> " << end << std::endl;
  std::cout << parent.child(start, 0).data().typeName() << std::endl;
  std::cout << qPrintable(parent.child(start, 0).data().toString()) << std::endl;
 }

(std :: coutを使用することは、Qtでの良い習慣ではないと思います。これは、始めるためだけのものです。)

aboutToBe...QAbstractItemModelからの他のシグナルは、ファイルシステムで発生する他のイベントに使用できます。

于 2011-08-13T17:49:41.173 に答える