Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use QFileSystemWatcher to monitor a folder for change

Tags:

c++

qt

I'm new with QT and I want to use the QFileSystemWatcher to monitor a folder. I just can't figure how to do that.

I read http://qt-project.org/doc/qt-4.8/qfilesystemwatcher.html but I don't know how to even initialize it.

I haven't found a single example, so now, I please if somebody could post an explanation or a simple example that monitors a folder and nothing more.

Oh, and this is supposed to run in console if it matters.

Thx for your answers and regards.

like image 881
Hami Avatar asked Apr 06 '12 14:04

Hami


1 Answers

Please have a look at this .h and .cpp , it shows the example... cheers !

#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();
}

When ever you modify, or create or delete a file or folder within "C:/QtTest" path you will get a message box.

like image 143
Soumya Kundu Avatar answered Nov 17 '22 23:11

Soumya Kundu