私は試してみましたがQFileSystemWatcher
、どういうわけか期待どおりに動作しません。それとも私は何か間違ったことをしていますか?
QFileSystemWatcher
単一のファイルを監視するように設定しました。初めてファイルを変更すると、発行されますfileChanged()
が、それで問題ありません。しかし、ファイルを再度変更すると、fileChanged()
もう出力されません。
ソースコードは次のとおりです。
main.cpp
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
}
メインウィンドウ.h
#include <QDebug>
#include <QFileSystemWatcher>
#include <QMainWindow>
#include <QString>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
private slots:
void directoryChanged(const QString & path);
void fileChanged(const QString & path);
private:
QFileSystemWatcher * watcher;
};
メインウィンドウ.cpp
#include "mainwindow.h"
MainWindow::MainWindow()
{
watcher = new QFileSystemWatcher(this);
connect(watcher, SIGNAL(fileChanged(const QString &)), this, SLOT(fileChanged(const QString &)));
connect(watcher, SIGNAL(directoryChanged(const QString &)), this, SLOT(directoryChanged(const QString &)));
watcher->addPath("path to directory");
watcher->addPath("path to file");
}
void MainWindow::directoryChanged(const QString & path)
{
qDebug() << path;
}
void MainWindow::fileChanged(const QString & path)
{
qDebug() << path;
}
回答ありがとうございます。
編集 1
このコードを Linux で実行しました。
編集 2
実際には、ディレクトリによって指定されたツリー内のすべての MetaPost ファイルを、変更されているかどうかを確認する必要があります。私はおそらく、毎秒 QTimer を実行し、すべてのファイルを手動でチェックするという別の解決策に固執するでしょう。QFileSystemWatcher はおそらく内部で同様の方法でこれを行いますが、おそらくより効果的です。