簡単なウォッチャーを作成し、パスを追加しました。ウォッチャーのシグナルをメソッドに接続しました。
void CssSetter::watchIfNeeded(const QString& newPath)
{
if(watcher==nullptr) {
watcher = new QFileSystemWatcher(this);
connect(watcher, &QFileSystemWatcher::fileChanged, this, &CssSetter::cssFileChanged);
}
watcher->addPath(newPath);
}
コールバックは次のようになります。
void CssSetter::cssFileChanged(const QString& path)
{
qDebug()<<"CSS "<<path<<" changed!";
QFileInfo css_file(path);
qDebug()<<"[CSS] Watcher: "<<path<<(css_file.isFile()?" exists!":" doesn't exist!");
// Should update CSS file, but fails because it also has `.exists()` checks inside
setCSSFromPath(path);
}
出力は次のとおりです。
csssetter.cpp:81 (void CssSetter::cssFileChanged(const QString&)): CSS "/storage/extSdCard/w98.css" changed!
csssetter.cpp:84 (void CssSetter::cssFileChanged(const QString&)): [CSS] Watcher: "/storage/extSdCard/w98.css" doesn't exist!
csssetter.cpp:24 (void CssSetter::setCSSFromPath(QFile&)): [CSS] "/storage/extSdCard/w98.css" doesn't exist!
最後の行は、通常、ファイルが存在する場合はそのファイルをロードする役割を果たします。コントロールをオーバーライドしようとしてもうまくいきませんでした。ファイル ウォッチャーのコールバック中にファイルを読み取ることはできません。
QFileSystemWatcher
ファイルが変更されたと報告された場合、ファイルを正しく読み取るにはどうすればよいですか? これは意図されたものですか、それともバグですか?