gpt4 book ai didi

javascript - 从 C++ 访问 qml 元素 ID

转载 作者:搜寻专家 更新时间:2023-10-31 01:12:59 25 4
gpt4 key购买 nike

在c++端我写了这段代码

    :::::::::::::
QMetaObject::invokeMethod(rootObject,"changeText",Q_ARG(QVariant,"txt1"),
Q_ARG(QVariant,"hello"))

在 qml 端我写了这个

Text {
id: txt1
text: "hi"
}

function changeText(id,str){
id.text=str
}

changeText 函数在 qml 端工作,但当我从 C++ 端调用它时它不起作用。我认为 Cpp 方方法将“txt1”作为 QString 发送,因此 changeText 函数不起作用。

你能告诉我我该怎么做吗?

最佳答案

从 C++ 更改 qml 对象属性的正确方法是在 C++ 中获取该对象,然后调用 setProperty() 方法。例子:qml:

Rectangle
{
id: container
width: 500; height: 400

Text {
id: txt1
objectName: "text1"
text: "hi"
}
}

请注意,您必须添加用于获取子项的对象名称属性。在此示例中,矩形是根对象。然后在 C++ 中:

QObject *rootObject = dynamic_cast<QObject*>(viewer.rootObject());
QObject *your_obj = rootObject->findChild<QObject*>("text1");
your_obj->setProperty("text", "500");

您可以像这样将其压缩为一行调用:

viewer.rootObject()->findChild<QObject*>("text1")->setProperty("text", "You text");

另一种方法是使用您之前使用的方法,但将对象名称赋予 changeText 方法并遍历主对象的子对象,直到找到您感兴趣的对象:

Rectangle {
id: container
width: 500; height: 400

Text {
id: txt1
objectName: "text1"
text: "hi"
}

function changeText(objectName,str){
for (var i = 0; i < container.children.length; ++i)
if(container.children[i].objectName === objectName)
{
container.children[i].text = str;
}
}
}

关于javascript - 从 C++ 访问 qml 元素 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13187439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com