如何将数据从 c++ "pull"到 qml?

How to "pull" data from c++ to qml?

本文关键字:pull qml c++ 数据      更新时间:2023-10-16

我想在qml中从c ++中"拉取"数据,如下所示:

   Component.onCompleted: {
        MySettings.loadMainWindowPosition(aAppWnd.x, aAppWnd.y, aAppWnd.width, aAppWnd.height, aAppWnd.visibility);
    }

当"我的设置"按以下方式注册时:

context->setContextProperty("MySettings", m_settings);

但是当我像这样制作功能签名时:

void MySettings::loadMainWindowPosition(int& x, int& y, int& width, int& height, int& visibility)

我收到以下错误:

qrc:/

GUI/App.qml:35:错误:未知方法参数类型:int&

那么如何正确地从 c++ "提取"qml 中的数据呢?

更新:

我解释得更好。现在我可以从 qml 调用 c++ 函数(并发送参数(:

   Component.onCompleted: {
        MySettings.someFunc(111, 222);
    }

在 c++ 代码中,我收到参数值为"111"和"222"的函数调用。

但是我想在 c++ 中更改此参数。我想要这样的 smth:

   Component.onCompleted: {
        var a;
        var b;
        MySettings.someFunc(a, b);
    }

我想在 c++ 代码参数中设置为"333"和"555"。所以在调用MySettings.someFunc(a,b(之后,我期望(a==333(和(b==555(。

怎么做?

从 QML 调用C++函数时,不要尝试将返回值作为引用参数获取。请改用返回值。要在单个调用中传输多个值,请定义C++方法,例如

Q_INVOKABLE QVariantList someFunc() { ... }

并在 QML 中使用它

Component.onCompleted: {
    var returnValues = MySettings.someFunc();
    //access the returnValues via list indices here:
    var a = returnValues[0];
    var b = returnValues[1];
}

通过引用传递值不起作用,从 QML 调用 c ++ 函数。如果你想要同步调用,请在 c ++ 代码中使用一些链接:

QVariantList MySettings::someFunc(int a, int b){
        QVariantList list;
        list.append(a + 5); // edit the passed values here
        list.append(b + 5); // edit the passed values here
        return list;
    }

在你的 QML 代码中像这样的东西:

var test = gapi.someFunc(3,2); // pass values here and get the new ones
console.log("The return data" + test);