我正在尝试学习一些 qt 和 qml,我想制作一个小型应用程序,它将监视本地文件的更改并在发生更改时更改 Text
组件。我的代码基于此 answer ,但即使在编译和运行期间我没有收到任何警告/错误,将 QFileSystemWatcher
的 fileChanged
信号连接到 qml connections
元素, 不起作用,即当 watchedFile.txt
被修改时,文本不会改变。如何检查qml代码中是否收到信号?
这是我的代码:
C++:
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QFileSystemWatcher watcher;
watcher.addPath(QStringLiteral("qrc:/watchedFile.txt"));
QQmlApplicationEngine* engine = new QQmlApplicationEngine;
engine->rootContext()->setContextProperty("cppWatcher", &watcher);
engine->load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
qml:
import QtQuick 2.7
import QtQuick.Controls 2.0
ApplicationWindow {
visible: true
width: 640
height: 480
Text {
id: text
text:"TEXT"
}
Connections {
target: cppWatcher
onFileChanged: {
text.text = "CHANGED"
}
}
}
最佳答案
您应该尝试使用文件系统上的文件。 qrc 资源中的文件嵌入到可执行文件中,它们不会更改。不确定您期望发生什么。除此之外,这是您连接到 CPP 对象的声明方式。
关于c++ - Qt:c++ 信号到 qml 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43426410/