繁体   English   中英

将 C++ 信号连接到 QML 插槽

[英]Connect C++ signal to QML slot

我正在尝试将 C++ 信号与 QML 插槽连接起来。

C++ 信号称为userRegistered() ,QML 槽称为userRegisteredQML()

在 C++ 文件中,我有以下内容:

QQuickView view(QUrl::fromLocalFile("interface.qml"));

QObject *topLevel = view.rootContext();

connect(myClass, SIGNAL(userRegistered()), topLevel, SLOT(userRegisteredQML()));

interface.qml中,我有插槽userRegisteredQML

function userRegisteredQML(){
    console.log("this is a test!");
}

问题是它没有显示“这是一个测试!”。 因此,我想问你这是否是将 C++ 信号连接到 QML 插槽的正确方法。

QML js 函数不是插槽。
您应该只在 C++ 中创建信号,然后在 QML 中处理它。
这也是该信号确切存在的地方。
如果它是QML_ELEMENT ,您将在 QML 的组件实例化中处理它。

SomeTypeFromC++{
    onUserRegistered: {do_somthing()}
}

如果它在引擎rootContextProperty中,则可以使用Connections QML 类型:

Connections {
    target: appCore // The name of the context property
    onUserRegistered: {do_somthing()}
}

在 C++ 中将您的对象暴露给 QML:

topLevel->setContextProperty("MyClass", myClass);

在 QML 中,您可以使用连接:

Connections {
    target: MyClass 
    userRegistered: {
        // do something with it here
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM