Qt:c ++信号到qml连接

时间:2017-04-15 13:07:30

标签: c++ qt qml qt5 signals-slots

我正在尝试学习一些qt和qml,我想创建一个小应用程序,它将监视本地文件的更改,并在发生更改时更改Text组件。我的代码基于answer,但即使我在编译和运行期间没有收到任何警告/错误,也要将fileChanged的{​​{1}}信号连接到qml {{1}元素,不起作用,即修改QFileSystemWatcher时文本不会改变。如何检查qml代码中是否收到信号?

这是我的代码:

C ++:

connections

QML:

watchedFile.txt

3 个答案:

答案 0 :(得分:2)

您应该尝试文件系统上的文件。 qrc资源中的文件嵌入到可执行文件中,它们不会更改。不确定你期望发生什么。除此之外,这是您与CPP对象建立连接的声明方式。

答案 1 :(得分:0)

正如@dtech已经注意到的那样,

watcher.addPath(QStringLiteral("qrc:/watchedFile.txt"));

正在返回false,因为qrc:/无法将watcher识别为正确的路径。实际上,这条路径根本不存在于文件系统中,因为它是嵌入在可执行文件中的内部资源文件。

如果你将文件的路径放在磁盘上,你的代码就可以了。

此外,您肯定应该在此处查看返回结果,如果它返回false,则不允许进一步继续。

以下内容在这里会更好用:

if (!watcher.addPath(QStringLiteral("C:/your_path/watchedFile.txt")))
    return 1;

答案 2 :(得分:-2)

当文件路径发生变化时,会发出信号fileChanged,而不是其内容。

https://doc.qt.io/qt-5/qfilesystemwatcher.html#fileChanged