Я пытался выяснить это на выходных, но безрезультатно. Я не могу найти пример использования QFileSystemWatcher :: Файлы () Прямо так, я думал, что спросить.
У меня есть программа, которая:
Я признаю, что моя реализация QfileSystemWatcher, вероятно, не верна. но этот код работает и вызывает сигнал / слот. но счет всегда равен нулю …
из mainwindow.cpp …
сигнал:
//connect push buttons
QObject::connect(ui->startButton, SIGNAL(clicked()),
this, SLOT(startButtonClicked()));
//link qfilesystemwatcher with signals and slots
QObject::connect(&hotfolder, SIGNAL(directoryChanged(QString)), this, SLOT(hotfolderChanged()));
слоты:
void MainWindow::startButtonClicked(){
//start the file system watcher using the 'source folder button'
//first, get the resulting text from the source folder button
QString sourceText = ui->sourceBtnLineEdit->text();
ui->statusbar->showMessage(sourceText);
//convert the text from source button to a standard string.
string filePath = sourceText.toStdString();
cout << filePath << endl;
//call method to add source path to qfilesystemwatcher
startWatching(sourceText);
}
void MainWindow::hotfolderChanged(){
int fileCount = filesWatched();
ui->statusbar->showMessage(QString::number(fileCount));
}
от magickWatcher.h
#ifndef MAGICKWATCHER_H
#define MAGICKWATCHER_H
#include <QFileSystemWatcher>
#include <mainwindow.h>
//create the qFileSystemWatcher
QFileSystemWatcher hotfolder;
//add folder to qfilesystemwatcher
//starts watching of folder path
int startWatching( QString folder){
hotfolder.addPath(folder);
cout << "hotfolder created!" << endl;
return 0;
}
//get file list of folder being watched
int filesWatched(){
QStringList watchedList = hotfolder.files();
//report out each line of file list
for (int i = 0; i < watchedList.size(); ++i){
cout << watchedList.at(i).toStdString() << endl;
cout << "is this looping?!!" << endl;
}
return watchedList.count();
}#endif // MAGICKWATCHER_H
Как я могу использовать QFileSystemWatcher, чтобы получить количество файлов просматриваемой папки? Я знаю о QDir и его параметры, но хочу конкретно знать, как использовать QFileSystemWatcher.
Я все еще оборачиваюсь вокруг c ++ в целом, так что спасибо за любые советы или советы. Я думаю, возможно, моя проблема в том, как я реализую QFileSystemWatcher.
Некоторые соответствующие ссылки, которые я использовал:
Сначала давайте подробнее рассмотрим документы (жирный формат — мой):
QFileSystemWatcher
исследует каждый путь, добавленный к нему. Файлы, которые были добавлены вQFileSystemWatcher
можно получить с помощьюfiles()
функция, и каталоги, использующиеdirectories()
функция.
Так, files()
возвращает только список файлов, которые вы уже добавили в наблюдатель, используя addPath()
метод, а НЕ список файлов, которые неявно отслеживаются путем добавления каталога.
Вы можете получить информацию о файлах в наблюдаемом каталоге, например, используя QDir :: entryInfoList с фильтры применимо в вашем случае. По крайней мере QDir::Files
и, возможно, QDir::NoDotAndDotDot
будет иметь смысл.
//get file list of folder being watched
int filesWatched() {
QString folder = "/path/to/hotfolder/";
QDir monitoredFolder(folder);
QFileInfoList watchedList =
monitoredFolder.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);
QListIterator<QFileInfo> iterator(watchedList);
while (iterator.hasNext())
{
QFileInfo file_info = iterator.next();
qDebug() << "File path:" << file_info.absoluteFilePath();
}
return watchedList.count();
}