问题标签 [qfilesystemwatcher]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
741 浏览

c++ - Qt 设备观察者?

由于我在这里遇到的问题无法在没有 sudo 的情况下使用 Qt 应用程序中的键盘和这里的Qt 嵌入式 linux 事件观察器我想知道 Qt 中是否有事件观察器?我找到了名为QFileSystemWatcher的库,但它不适用于设备,只能用于常规文件。我还为这个QDeviceWatcher找到了一个 3rd 方库,但它只包含插入或移除新设备时的信号,而不是它更改时的信号(例如我按下一个键)。我需要观察键盘设备/dev/input/event1的击键。我会感谢所有的帮助!

0 投票
1 回答
2473 浏览

python - PyQt,QFileSystemWatcher 不捕获添加的文件

我需要监视某个文件夹并找出是否将新文件添加到该文件夹​​中,然后询问用户是否要打印该文件。问题出在 QFileSystemWatcher 上,我真的不知道如何获取已添加的文件的名称。我尝试了这段代码(见下文),但 file_changed 函数对任何文件夹更改都没有反应。directory_changed 函数有效。

如何获取已添加文件的名称以及如何捕获信号/布尔值,以便在添加文件时触发 MessageBox 和我的系统托盘消息(参见代码)。非常感谢,对糟糕的代码感到抱歉,我是 Qt 的新手。请不要指给我看 C++ 的例子,我不明白。

0 投票
2 回答
975 浏览

c++ - QFileSystemWatcher:检测文件是否已被刷新

我有一个 QT 应用程序,它需要知道特定文件中何时有新数据可用。所以我使用QFileSystemWatcher并将fileChanged信号连接到一个函数,该函数将在发生变化时发送消息。

问题是fileChanged当另一个应用程序刷新此文件时不会发出信号,而只会在它关闭文件后发出。

但是,QFileSystemWatcher 文档说这个信号是“当指定路径的文件被修改、重命名或从磁盘中删除时”发出的。也许我错过了一些东西;包含哪些变化modified?如果不包括刷新,如何检测新数据何时写入文件?

这是源代码:

主文件

主窗口.h

主窗口.cpp

这是另一个更改文件的应用程序的代码(这是一个第 3 方应用程序,所以我无法将其更改为与之同步):

fileChanged()信号仅在被调用之后才发出,而std::ofstream outfile ("path to file");不是outfile.close();之后outfile.flush();

0 投票
0 回答
1139 浏览

android - 在 Android 上的 QFileSystemWatcher 回调中无法访问文件

我创建了一个简单的观察者并添加了一条路径。我将观察者的信号连接到我的方法:

回调如下所示:

输出是:

最后一行来自通常负责加载文件(如果存在)的函数。当我试图覆盖控件时,它不起作用。在文件观察者的回调中读取文件是不可能的

QFileSystemWatcher当报告文件已更改时,如何正确读取文件?这是故意的,还是一个错误?

0 投票
2 回答
913 浏览

c++ - 使用 QFileSystemWatcher::Files() 获取监视文件夹示例的文件数?计数始终为 0?

我试图在周末解决这个问题,但无济于事。我似乎找不到直接使用QFileSystemWatcher::Files()的示例,所以我想我会问。

我有一个程序:

  1. 让用户选择一个“源”文件夹。
  2. 按下按钮开始查看该源文件夹中的新文件
  3. 使用'directoryChanged()'发出一个信号,我尝试在每次添加或删除文件时更新计数。

我会承认我的 QfileSystemWatcher 实现可能不正确。但是这段代码正在工作并且确实触发了信号/插槽。但计数始终为零...

从 mainwindow.cpp...

信号:

插槽:

来自magickWatcher.h

我如何使用 QFileSystemWatcher 来获取监视文件夹的文件数?我了解QDir及其选项,但想具体了解如何使用 QFileSystemWatcher。

总的来说,我仍然在围绕 C++ 进行思考,所以也感谢您提供的任何建议或提示。我想也许我的问题是我如何实现 QFileSystemWatcher。

我使用过的一些相关链接:

QFileSystemWatcher 仅在 main() 中工作

http://doc.qt.io/qt-5/qfilesystemwatcher.html#files

0 投票
0 回答
583 浏览

c++ - 删除文件时发出两次 QFileSystemWatcher directoryChanged 信号

我有一些代码来监视包含 .xml 文件的文件夹。我使用 aQFileSystemWatcher并将信号连接directoryChanged(const QString &path)到一个插槽,我在其中实现了一个小例程。

当我删除位于此受监视文件夹中的文件时,信号会发出两次,我不知道为什么。

我已经阅读了关于 stackoverflow 的其他帖子,但我发现的所有帖子在编辑文件而不是删除文件时都提到了同样的问题。由于我正在删除文件而不是编辑它们,因此该文件不会先被删除然后由编辑器再次写入。

任何人都知道为什么会发生这种情况以及如何解决它?如果需要,我可以添加一些代码。

谢谢 !

编辑:阅读这个问题后,我添加Qt::UniqueConnection到我的连接以确保它只完成一次(即使我确定连接只使用自动连接进行一次,因为它是在主窗口的构造函数中调用的),但是结果是一样的。

0 投票
1 回答
369 浏览

c++ - 无法将 QFileSystemWatcher::directoryChanged 连接到 lambda

正如标题所说,我正在尝试将QFileSystemWatcher::directoryChanged(const QString&)信号连接到 lambda,但是当我使用 g++ (7.2.1) 编译它时,我收到以下错误(缩写是因为 SO 不会让我发布太多代码):

我正在使用 Qt 5.9 进行编译。任何想法为什么会发生这种情况?AFAICT 我正在使用的 lambda 很好。这是我的 MWE:

foo.cpp:

foo.pro:

0 投票
1 回答
941 浏览

python - 如何更新 QFileSystemModel 中的文件信息?

首先,这个问题类似于另一个QFileSystemModel 在文件更改时不更新的主要区别,而不是在这种情况下,我不想在每次更新我的一个文件时替换整个模型。

在现实世界的例子中,我的应用程序将打开几个文件,所以我基本上只是想了解如何更新一个特定 QFileSystemModel 项目的信息(大小,修改日期),下面你有一个小 mcve 可以玩,如您可以在该代码中看到我尝试使用setData失败:

所以问题是,我怎样才能实现update_file更新该特定文件的信息foo.txt

目标是仅更新该文件而不替换此处显示的整个模型,而且一旦更新该模型项目,该项目根本不会在视图中排序/移动会很好。

0 投票
1 回答
649 浏览

qt - Qt:在 SQLite 数据库上捕获外部更改

)

我正在使用我通过访问的 SQLite 数据库开发程序QSqlDatabase。我想处理(希望很少见)对数据库进行一些更改但不是由程序在运行时引起的情况(例如,用户可以删除写访问权限、移动或删除文件或手动修改它)。

我尝试使用QFileSystemWatcher. 我让它监视数据库文件,并且在所有向它写入内容的函数中,我阻止了它的信号,因此只有“外部”更改才会触发更改的信号。

问题是检查QFileSystemWatcher和/或实际写入磁盘的检查QSqlDatabase::commit()似乎并没有发生在我调用的确切时刻commit(),所以实际上,首先QFileSystemWatcher阻止 ' 的信号,然后我更改一些东西,然后我解除阻止它们并然后,它报告要更改的文件。

然后,我尝试在每次函数请求更改时设置一个布尔变量 ( m_writeInProgress) 。true“已更改”插槽然后检查是否已请求写入操作,如果是,则再次设置m_writeInProgressfalse并退出。这样,它只会处理“外部”更改。

问题仍然是,如果更改发生在实际写作正在进行的确切时刻,则不会被捕获。

所以可能,使用 aQFileSystemWatcher是实现这一点的错误方法。

这怎么能以安全的方式完成?

感谢大家的帮助!

编辑:

我找到了解决部分问题的方法。在数据库文件上启动排他锁可防止其他连接更改它。这很简单,我只需要执行

并处理如果我的程序的另一个实例尝试访问数据库时出现的错误。

剩下的就是知道用户是否(不小心)在运行时删除了文件......

0 投票
1 回答
191 浏览

c++ - 为什么 QFileSystemWatcher 会发出多个信号?而QFileInfo第一次写入零文件大小

更改文件时,信号应该触发 1 次,但对我来说它可以工作多次。

设置功能中,我要求尺寸并打印

更改文档后,信号处理了 2 次,尽管我保存了文档并更改了 1 次。

为什么 QFileSystemWatcher 会发出 2 次信号?

为什么 QFileInfo 在第一次请求时产生零大小?

我编辑文件记事本++