如何"pull"数据从c++转qml?
How to "pull" data from c++ to qml?
我想要 "pull"qml 中来自 c++ 的数据,如下所示:
Component.onCompleted: {
MySettings.loadMainWindowPosition(aAppWnd.x, aAppWnd.y, aAppWnd.width, aAppWnd.height, aAppWnd.visibility);
}
当MySettings通过以下方式注册时:
context->setContextProperty("MySettings", m_settings);
但是当我像这样制作函数签名时:
void MySettings::loadMainWindowPosition(int& x, int& y, int& width, int& height, int& visibility)
我收到以下错误:
qrc:/GUI/App.qml:35: Error: Unknown method parameter type: int&
那么 "pull" 来自 c++ 的 qml 中的数据有多正确?
更新:
我解释得更好。现在我可以从 qml:
调用 c++ 函数(并发送参数)
Component.onCompleted: {
MySettings.someFunc(111, 222);
}
在 C++ 代码中,我收到参数值为“111”和“222”的函数调用。
但我想在 C++ 中更改此参数。我想要这样的东西:
Component.onCompleted: {
var a;
var b;
MySettings.someFunc(a, b);
}
我想在 C++ 代码参数中设置“333”和“555”。所以在调用 MySettings.someFunc(a, b) 之后我预计 (a==333) 和 (b==555)。
如何操作?
从 QML 调用 C++ 函数时,不要尝试获取 return 值作为参考参数。相反,使用 return 值。要在一次调用中传输多个值,请将 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++ 代码中使用 link 这个:
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);
我想要 "pull"qml 中来自 c++ 的数据,如下所示:
Component.onCompleted: {
MySettings.loadMainWindowPosition(aAppWnd.x, aAppWnd.y, aAppWnd.width, aAppWnd.height, aAppWnd.visibility);
}
当MySettings通过以下方式注册时:
context->setContextProperty("MySettings", m_settings);
但是当我像这样制作函数签名时:
void MySettings::loadMainWindowPosition(int& x, int& y, int& width, int& height, int& visibility)
我收到以下错误:
qrc:/GUI/App.qml:35: Error: Unknown method parameter type: int&
那么 "pull" 来自 c++ 的 qml 中的数据有多正确?
更新:
我解释得更好。现在我可以从 qml:
调用 c++ 函数(并发送参数) Component.onCompleted: {
MySettings.someFunc(111, 222);
}
在 C++ 代码中,我收到参数值为“111”和“222”的函数调用。
但我想在 C++ 中更改此参数。我想要这样的东西:
Component.onCompleted: {
var a;
var b;
MySettings.someFunc(a, b);
}
我想在 C++ 代码参数中设置“333”和“555”。所以在调用 MySettings.someFunc(a, b) 之后我预计 (a==333) 和 (b==555)。
如何操作?
从 QML 调用 C++ 函数时,不要尝试获取 return 值作为参考参数。相反,使用 return 值。要在一次调用中传输多个值,请将 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++ 代码中使用 link 这个:
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);