[英]qml element id access from c++
在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端方法將Qtxt發送“ txt1”作為QString,因此changeText函數不起作用。
你能告訴我我該怎么做嗎?
從c ++更改qml對象屬性的正確方法是在c ++中獲取該對象,然后調用setProperty()方法。 示例:qml:
Rectangle
{
id: container
width: 500; height: 400
Text {
id: txt1
objectName: "text1"
text: "hi"
}
}
請注意,您必須添加用於獲取子項的對象名屬性。 在此示例中,Rectangle是rootObject。 然后在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;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.