c++ - Qt:c++ 信号到 qml 连接

标签 c++ qt qml qt5 signals-slots

我正在尝试学习一些 qt 和 qml,我想制作一个小型应用程序,它将监视本地文件的更改并在发生更改时更改 Text 组件。我的代码基于此 answer ,但即使在编译和运行期间我没有收到任何警告/错误,将 QFileSystemWatcherfileChanged 信号连接到 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/

相关文章:

c++ - 如何在 Ubuntu 12.04 中为 Qt Creator 安装和设置 OpenCV 2.6.1

qt - 在没有安装 Qt 的情况下无法将我的 Quick 2 应用程序部署到 Windows 系统

android - 通过QML Camera绘制Qt GUI元素

qt - 如何使 QML ListView 不可滑动?

c++ - linux aes256 带 cbc 加密/解密库

c++ - Mac - 使用 Qt 检测网络断开连接

c++ - 可移植可变参数宏

c++ - 在 QGraphicsView 上实现交互式样条曲线的最佳方法是什么?

c++ - Qt并发映射错误c2440

c++ - 为什么 C++ 不支持函数返回数组?