QFileSystemModel и QFileSystemWatcher удаляют с диска - PullRequest
2 голосов
/ 13 августа 2011

У меня есть QTreeView, который заполняется через повторную реализацию QFileSystemModel. Насколько я знаю, QFileSystemModel устанавливает QFileSystemWatcher в rootPath. То, что я пытаюсь сделать, это уведомить в моей программе, когда файл удаляется напрямую в rootPath, но я не нашел никакой функции о переопределении сигнала, которая предоставляет мне эту информацию.

Мое приложение загружает некоторые файлы через FTP-соединение, и когда файл полностью загружен, я удаляю его из расположения, поэтому я хочу получить уведомление о повторной реализации QFileSystemModel, когда файл удаляется напрямую (не из метода удаления или чего-то еще). подобный).

Надеюсь, ты поможешь мне. Я много искал в Интернете, но ничего не могу найти.

Приветствие.

1 Ответ

2 голосов
/ 13 августа 2011

Вы можете использовать сигнал FileSystemModel rowsAboutToBeRemoved (унаследованный от QAbstractItemModel).

Он будет срабатывать всякий раз, когда строкаснято с модели.Параметры parent, start и end позволяют получить имя файла (в столбце 0 дочерних элементов).

Пример кода:

// 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 могут использоваться для других событий, происходящих нафайловая система.

...