2

qtでディレクトリを監視する必要があります。接続を作成しました。ただし、ファイルが編集されると、送信者はディレクトリ変更シグナルを 2 回送信します。filechanged シグナルも同時に発せられます。信号を 2 回発することの用途は何ですか? どのファイル/フォルダが変更されたかを知る方法はありますか? 助けてください..これが接続コードです

QFileSystemWatcher *watcher = new QFileSystemWatcher;
watcher->addPath("/home/user/directory/");
connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(directoryChangedHandler(QString)));

と機能

void MainWindow::directoryChangedHandler(QString path)
{
    QMessageBox::information(0, "Directory Changed", "Directory Changed at " + path);
}
4

1 に答える 1

7

私は問題を理解しました。通常のエディタは、ディスクからファイルを削除して再度書き込みます。つまり、削除されたファイルと追加されたファイルの 2 つのシグナルです。のエディターを使用してファイルをnano編集してみましたUbuntudirectoryChanged信号は発信しませんが、信号を発信しfileChangedます。つまり、ファイルを削除して追加するのではなく、同じファイルを編集します。この結論に役立つもう 1 つのことは、通常のエディターを使用しているときに、パスがwatcher. つまり、ファイルはしばらく存在しません。そのパスを手動で再度追加する必要があります。を使用している間は発生していませんnano。パスを追加するコードを書き直したので、エラー " QFileSystemWatcher: failed to add paths: /home/user/directory/file" が表示されます。パスが既にwatcher.

于 2013-03-20T05:45:28.723 に答える