4

次の問題があります。を作成するQFileSystemWatcherと、Linuxで正常に実行および動作しますが、Windows 7では動作しません。コード内で動作しなくなる可能性のあるものを見つけることができますか?

どうも。

これを初期化するコードは次のとおりです。

mConfigChangeWatcher = new QFileSystemWatcher();
mConfigChangeWatcher->addPath(config_file_name);

QObject::connect(mConfigChangeWatcher,
                 SIGNAL(fileChanged(QString)),
                 this,
                 SLOT(configFileChanged(QString)));

そしてこれは仕事を成し遂げるスロットであると思われます:

void MyClass::configFileChanged(const QString &file)
{
    qDebug() << "Changed: " << file ;
}
4

2 に答える 2

5

ファイルの最初の変更後にメソッドを使用してファイルがウォッチャーに追加されているかどうかを確認するとQFileSystemWatcher::files()、正しいリストが表示されますか?

一部のアプリケーションでは、ファイルを変更するときに、システムから古いファイルを削除して再度書き込むという問題がありました。

QFileSystemWatcherは、ファイルの名前が変更されるかディスクから削除されるとファイルの監視を停止し、ディレクトリがディスクから削除されると監視を停止することに注意してください。

Photoshopで編集した画像ファイルを見るためにQFileSystemWatcherを使用していました。どういうわけか、ファイルは監視されているファイルのリストから削除されます。

于 2013-09-16T14:29:07.587 に答える
1

私は同じ問題を抱えていて、それを非常に速く解決しました。信号を管理するスロット内でfileChanged、パスがから消えることに気づきましたfiles()。チェックして、必要に応じて再追加するだけです

if (! watcher_.files().contains(path))
{
    watcher_.addPath(path);
}

これがお役に立てば幸いです

ファビオ

于 2014-10-13T16:15:50.620 に答える