Qt C++;向Qml发送信号 我试图在QML中捕获一个C++ QT信号。我能够发送一个信号,在Qt中捕捉一个Qml信号也在工作;但是,我无法在Qml中捕获Qt信号

Qt C++;向Qml发送信号 我试图在QML中捕获一个C++ QT信号。我能够发送一个信号,在Qt中捕捉一个Qml信号也在工作;但是,我无法在Qml中捕获Qt信号,c++,qt,qml,signals,slot,C++,Qt,Qml,Signals,Slot,我需要哪个QObject::connect 最小main.cpp: #include <QtGui/QGuiApplication> #include <QtQml/QQmlApplicationEngine> #include <QQmlContext> #include <QQuickWindow> #include "qmlcppapi.h" int main(i

我需要哪个QObject::connect

最小main.cpp:

    #include <QtGui/QGuiApplication>
    #include <QtQml/QQmlApplicationEngine>
    #include <QQmlContext>
    #include <QQuickWindow>
    
    #include "qmlcppapi.h"

    int main(int argc, char *argv[])
    {
        QGuiApplication app(argc, argv);
        qmlRegisterType<QmlCppApi>("com.handleQmlCppApi",1,0,"HandleQmlCppApi");
        QQmlApplicationEngine engine;
        const QUrl url(QStringLiteral("qrc:/qml/qmlfile.qml"));
        QmlCppApi api;
        engine.rootContext()->setContextProperty("api", &api);
        engine.load(url);
        QObject::connect(&api, &QmlCppApi::testStringSended,
                         &api, &QmlCppApi::printTestString);
        return app.exec();
    }
输出:

qml: send
cpp: recieved
cpp: sended

为什么我的Qml没有收到信号?

您有两个创建的QmlCppApi实例。一个在main.cpp中,您调用
api
,另一个在QML中,QML是未命名的handleqmlcpapi对象。你只需要其中一个。要从
api
捕获信号,需要一个
Connections
对象,如下所示:

Connections {
    target: api

    onTestStringSended: console.log("recieved")
}
qml: send
cpp: recieved
cpp: sended
Connections {
    target: api

    onTestStringSended: console.log("recieved")
}