Javascript 从c++; 在C++方面我写了这个代码< /p> ::::::::::::: QMetaObject::invokeMethod(rootObject,"changeText",Q_ARG(QVariant,"txt1"), Q_ARG(QVariant,"hello"))
在qml方面,我写了这个Javascript 从c++; 在C++方面我写了这个代码< /p> ::::::::::::: QMetaObject::invokeMethod(rootObject,"changeText",Q_ARG(QVariant,"txt1"), Q_ARG(QVariant,"hello")),javascript,c++,methods,qml,Javascript,C++,Methods,Qml,在qml方面,我写了这个 Text { id: txt1 text: "hi" } function changeText(id,str){ id.text=str } 转换函数在QML侧工作,但当从C++侧调用时,它不起作用。我认为Cpp端方法将“txt1”作为QString发送,所以changeText函数不起作用 你能告诉我如何才能做到这一点吗?< /P> < P>从C++中改变QML对象的属性的正确方法是用C++获得该对象,而不是调用 SETFrimTyes(
Text {
id: txt1
text: "hi"
}
function changeText(id,str){
id.text=str
}
转换函数在QML侧工作,但当从C++侧调用时,它不起作用。我认为Cpp端方法将“txt1”作为QString发送,所以changeText函数不起作用
<>你能告诉我如何才能做到这一点吗?< /P> < P>从C++中改变QML对象的属性的正确方法是用C++获得该对象,而不是调用<强> SETFrimTyes()
QObject *rootObject = dynamic_cast<QObject*>(viewer.rootObject());
QObject *your_obj = rootObject->findChild<QObject*>("text1");
your_obj->setProperty("text", "500");
QObject*rootObject=dynamic_cast(viewer.rootObject());
QObject*your_obj=rootObject->findChild(“text1”);
您的_obj->setProperty(“text”,“500”);
您可以按如下方式将此压缩为一行呼叫:
viewer.rootObject()->findChild<QObject*>("text1")->setProperty("text", "You text");
viewer.rootObject()->findChild(“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;
}
}
}
矩形{
id:集装箱
宽度:500;高度:400
正文{
id:txt1
对象名称:“text1”
文字:“嗨”
}
函数changeText(objectName,str){
对于(变量i=0;i < >代码>从C++中获得对象的正确方法是在C++中获取该对象,而不是调用<强> SETFrimeTyes()>方法。例子:
qml:
请注意,必须添加用于获取子对象的对象名属性。在本例中,矩形是根对象。然后在c++中:
QObject *rootObject = dynamic_cast<QObject*>(viewer.rootObject());
QObject *your_obj = rootObject->findChild<QObject*>("text1");
your_obj->setProperty("text", "500");
QObject*rootObject=dynamic_cast(viewer.rootObject());
QObject*your_obj=rootObject->findChild(“text1”);
您的_obj->setProperty(“text”,“500”);
您可以按如下方式将此压缩为一行呼叫:
viewer.rootObject()->findChild<QObject*>("text1")->setProperty("text", "You text");
viewer.rootObject()->findChild(“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;
}
}
}
矩形{
id:集装箱
宽度:500;高度:400
正文{
id:txt1
对象名称:“text1”
文字:“嗨”
}
函数changeText(objectName,str){
对于(变量i=0;i 谢谢JuliusG,但是我必须从C++中改变QML文件中的很多文本元素。你能建议更简单的方法吗?因为我必须为每一个文本元素写3行C++代码,非常感谢。现在是easier.thanks JuliusG,但是我必须从C++中改变QML文件中的很多文本元素。你能建议更简单的方法吗?因为我必须为每一个文本元素写3行C++代码,非常感谢。现在更容易了。