1

Qt を使用して Windows でアプリを開発していますが、特定のフォルダーの変更を検出する必要があります。そこで、QFileSystemWatcher を使用し、変更があった場合にメッセージを送信する関数に directoryChanged シグナルを接続しました。

問題は、ファイルの内容を変更した場合に directoryChanged に接続された「スロット」関数が呼び出されず、ファイルまたはディレクトリが削除または追加された場合にのみ呼び出されることです。

ただし、ドキュメントによると、このシグナルは「指定されたパスのディレクトリが変更されたとき (たとえば、ファイルが追加、変更、または削除されたとき)、またはディスクから削除されたとき」に送信されます。

誰か説明がありますか?よろしくお願いします=)

4

1 に答える 1

0

Qt ソース コード バージョン 4.8.2 によると、次のようになります。

void QFileSystemWatcherPrivate::_q_directoryChanged(const QString &path, bool removed)
{
    Q_Q(QFileSystemWatcher);
    if (!directories.contains(path)) {
        // perhaps the path was removed after a change was detected, but before we delivered the signal
        return;
    }
    if (removed)
        directories.removeAll(path);
    emit q->directoryChanged(path);
}

directoryChanged は、ファイルが削除、追加されたとき (新しく追加されたファイルがディレクトリに含まれていない場合)、名前が変更されたときに発生するようです。実装は、ファイルのコンテンツの変更を検出することを保証しません。それが役立つことを願っています:P

于 2012-10-31T01:33:20.240 に答える