c – Qt QFileSystemWatcher:信号fileChanged()仅发出一次

前端之家收集整理的这篇文章主要介绍了c – Qt QFileSystemWatcher:信号fileChanged()仅发出一次前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试QFileSystemWatcher,它不知何故不能按预期工作.或者我做错了什么?

我已将QFileSystemWatcher设置为观看单个文件.当我第一次修改文件时,fileChanged()会被激活,这没关系.但是当我再次修改文件时,fileChanged()不再被激活.

这是源代码

main.cpp中

  1. #include <QApplication>
  2.  
  3. #include "mainwindow.h"
  4.  
  5. int main(int argc,char **argv)
  6. {
  7. QApplication app(argc,argv);
  8. MainWindow window;
  9.  
  10. window.show();
  11.  
  12. return app.exec();
  13. }

mainwindow.h

  1. #include <QDebug>
  2. #include <QFileSystemWatcher>
  3. #include <QMainWindow>
  4. #include <QString>
  5.  
  6. class MainWindow : public QMainWindow
  7. {
  8. Q_OBJECT
  9.  
  10. public:
  11.  
  12. MainWindow();
  13.  
  14. private slots:
  15.  
  16. void directoryChanged(const QString & path);
  17. void fileChanged(const QString & path);
  18.  
  19. private:
  20.  
  21. QFileSystemWatcher * watcher;
  22. };

mainwindow.cpp

  1. #include "mainwindow.h"
  2.  
  3. MainWindow::MainWindow()
  4. {
  5. watcher = new QFileSystemWatcher(this);
  6. connect(watcher,SIGNAL(fileChanged(const QString &)),this,SLOT(fileChanged(const QString &)));
  7. connect(watcher,SIGNAL(directoryChanged(const QString &)),SLOT(directoryChanged(const QString &)));
  8. watcher->addPath("path to directory");
  9. watcher->addPath("path to file");
  10. }
  11.  
  12. void MainWindow::directoryChanged(const QString & path)
  13. {
  14. qDebug() << path;
  15. }
  16.  
  17. void MainWindow::fileChanged(const QString & path)
  18. {
  19. qDebug() << path;
  20. }

谢谢您的回答.

编辑1

我在Linux下运行此代码.

编辑2

我实际上需要检查某个目录给出的树中的所有MetaPost文件,无论它们是否被修改.我可能会坚持我的替代解决方案,即每秒运行QTimer并手动检查所有文件. QFileSystemWatcher可能在内部以类似的方式执行此操作,但可能更有效.

解决方法

刚才有同样的问题.好像QFileSystemWatcher认为即使文件修改也会被删除.至少在Linux文件系统上.我的简单解决方案是:
  1. watcher->addPath(path);

将上面的内容添加到fileChanged()的处理程序中.根据需要更改单词观察者.

[编辑]删除了QFile :: exists(),用addPath()处理.

猜你在找的C&C++相关文章