将参数从 C++ 传递到 QML
Passing parameters from C++ to QML
我想将一些参数从 C++ 传递给 QML,以便 QML 可以用它们做一些事情。
有点像这样:
void MyClass::myCplusplusFunction(int i, int j)
{
emit mySignal(i, j);
}
在 QML 中,每次发出 mySignal(i, j)
时,我都想调用一个 QML 函数并用 i
和 j
做一些事情。
Connections {
target: myClass
// mySignal(i, j) is emitted, call myQmlFunction(i,j)
}
我该怎么做?
您可以在此处找到完整的文档:
假设您在 cpp 端有信号:
void yourSignal(int i, QString t)
您有两个选择:
将您的 class 注册为 qml 类型并将其用作 qml 对象。该对象将从 QML 端初始化。 reference:
qmlRegisterType<ClassNameCPP>("com.mycompany.qmlName", 1, 0, "ClassNameQml");
然后,在qml中:
import QtQuick 2.9
import com.mycompany.qmlName 1.0
Item{
ClassNameQml{
id: myQmlClass
onYourSignal: {
console.log(i,t); // Do whatever in qml side
}
}
}
将您的 class 添加为 qml 变量。当您需要多次重复使用您的对象时,此选项是首选。 reference:
view.rootContext()->setContextProperty("varName", &cppObject);
然后,在qml中:
import QtQuick 2.9
Item{
Connections{
target: varName
// In QML for each signal you have a handler in the form "onSignalName"
onYourSignal:{
// the arguments passed are implicitly available, named as defined in the signal
// If you don't know the names, you can access them with "arguments[index]"
console.log(i,t); // Do whatever in qml side
}
}
}
我想将一些参数从 C++ 传递给 QML,以便 QML 可以用它们做一些事情。
有点像这样:
void MyClass::myCplusplusFunction(int i, int j)
{
emit mySignal(i, j);
}
在 QML 中,每次发出 mySignal(i, j)
时,我都想调用一个 QML 函数并用 i
和 j
做一些事情。
Connections {
target: myClass
// mySignal(i, j) is emitted, call myQmlFunction(i,j)
}
我该怎么做?
您可以在此处找到完整的文档:
假设您在 cpp 端有信号:
void yourSignal(int i, QString t)
您有两个选择:
将您的 class 注册为 qml 类型并将其用作 qml 对象。该对象将从 QML 端初始化。 reference:
qmlRegisterType<ClassNameCPP>("com.mycompany.qmlName", 1, 0, "ClassNameQml");
然后,在qml中:
import QtQuick 2.9
import com.mycompany.qmlName 1.0
Item{
ClassNameQml{
id: myQmlClass
onYourSignal: {
console.log(i,t); // Do whatever in qml side
}
}
}
将您的 class 添加为 qml 变量。当您需要多次重复使用您的对象时,此选项是首选。 reference:
view.rootContext()->setContextProperty("varName", &cppObject);
然后,在qml中:
import QtQuick 2.9
Item{
Connections{
target: varName
// In QML for each signal you have a handler in the form "onSignalName"
onYourSignal:{
// the arguments passed are implicitly available, named as defined in the signal
// If you don't know the names, you can access them with "arguments[index]"
console.log(i,t); // Do whatever in qml side
}
}
}