【发布时间】:2017-04-15 13:07:30
【问题描述】:
我正在尝试学习一点 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"
}
}
}
【问题讨论】:
-
“即使我在编译和运行期间没有收到任何警告/错误”没有警告/错误消息并不意味着没有错误。
标签: c++ qt qml qt5 signals-slots