微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在尝试qfilesystemwatcher,它不知何故不能按预期工作.或者我做错了什么?

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

这是源代码

main.cpp中

#include <QApplication>

#include "mainwindow.h"

int main(int argc,char **argv)
{
  QApplication app(argc,argv);
  MainWindow window;

  window.show();

  return app.exec();
}

mainwindow.h

#include <QDebug>
#include <qfilesystemwatcher>
#include <QMainWindow>
#include <QString>

class MainWindow : public QMainWindow
{
  Q_OBJECT

public:

  MainWindow();

private slots:

  void directoryChanged(const QString & path);
  void fileChanged(const QString & path);

private:

  qfilesystemwatcher * watcher;
};

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow()
{
  watcher = new qfilesystemwatcher(this);
  connect(watcher,SIGNAL(fileChanged(const QString &)),this,SLOT(fileChanged(const QString &)));
  connect(watcher,SIGNAL(directoryChanged(const QString &)),SLOT(directoryChanged(const QString &)));
  watcher->addpath("path to directory");
  watcher->addpath("path to file");
}

void MainWindow::directoryChanged(const QString & path)
{
  qDebug() << path;
}

void MainWindow::fileChanged(const QString & path)
{
  qDebug() << path;
}

谢谢您的回答.

编辑1

我在Linux下运行此代码.

编辑2

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

解决方法

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

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

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

原文地址:https://www.jb51.cc/c/110362.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐