Я хочу обнаружить любые изменения в каталоге, кроме подпапок:
пример: если я помещаю список в каталог D: \ dropbox, я хочу, чтобы мое приложение показывало это:
я нашел этот пример в интернете, но он показывает только простое сообщение: «каталог изменен»
пожалуйста, может ли какое-нибудь тело помочь мне?
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QWidget>
#include <QMessageBox>
class MyClass : public QWidget
{
Q_OBJECT
public:
MyClass(QWidget* parent=0)
:QWidget(parent){}
~MyClass(){}
public slots:
void showModified(const QString& str)
{
Q_UNUSED(str)
QMessageBox::information(this,"Directory Modified", "Your Directory is modified");
}
};
#endif // MYCLASS_H#include <QApplication>
#include <QFileSystemWatcher>
#include <QDebug>
#include "MyClass.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QFileSystemWatcher watcher;
watcher.addPath("C:/QtTest");
QStringList directoryList = watcher.directories();
Q_FOREACH(QString directory, directoryList)
qDebug() << "Directory name" << directory <<"\n";
MyClass* mc = new MyClass;
QObject::connect(&watcher, SIGNAL(directoryChanged(QString)), mc, SLOT(showModified(QString)));
return app.exec();
}
я нашел этот пример в интернете, но он показывает только простое сообщение: «каталог изменен»
Correct, Qt и QFileSystemWatcher не могут сделать больше для вас на данный момент. Вы можете прочитать больше о планах по расширению поддержки, но ее пока нет:
http://blog.rburchell.com/2012/03/qt-51-aka-when-qfilesystemwatcher-might.html
Вам нужно будет реализовать это самостоятельно для каждой платформы, но если вы действительно в этом заинтересованы, вы можете поговорить с Робином о сотрудничестве.
Вот часть сообщения в блоге, чтобы увидеть, что планировалось:
В долгосрочной перспективе я планирую называть fileChanged и directoryChanged устаревшими. Они по-прежнему будут излучаться (конечно) для поддержания работоспособности существующего кода, но, кроме того, у вас будет (при условии проверки):
pathCreated (path) — испускается, когда что-то создается внутри каталога, который вы отслеживаете, или если создается то, чего не было, что вы отслеживали (подробнее об этом позже)
pathDeleted (путь) — генерируется, когда что-то удаляется в каталоге, который вы отслеживали, или что-то, что вы мы мониторинг был удален
fileModified (путь) — создается при изменении файла, который вы отслеживали (атрибуты или содержимое)
У меня также есть ранние планы представить pathMoved (oldLocation, newLocation), но у этого есть много предостережений: он может работать только на определенных платформах, в определенных фазах луны, и только если вам очень повезет — на многих платформы, он, вероятно, будет продолжать синтезироваться как pathDeleted (oldPath) и pathCreated (newPath) (если вы смотрите новое местоположение).
У меня также есть смутные идеи о введении более синтаксически дружественного API поверх этого, что-то вроде:
QPathMonitor pathMonitor (myPath);
подключения (&pathMonitor, SIGNAL (удаленный ()), слот (watchedPathDeleted ()));
… так далее …
но это немного дальше в том смысле, что я до сих пор не продумал это.