Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从c++; 在C++方面我写了这个代码< /p> ::::::::::::: QMetaObject::invokeMethod(rootObject,"changeText",Q_ARG(QVariant,"txt1"), Q_ARG(QVariant,"hello"))_Javascript_C++_Methods_Qml - Fatal编程技术网

Javascript 从c++; 在C++方面我写了这个代码< /p> ::::::::::::: QMetaObject::invokeMethod(rootObject,"changeText",Q_ARG(QVariant,"txt1"), Q_ARG(QVariant,"hello"))

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(

在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()>方法。例子: 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< >代码>从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++代码,非常感谢。现在更容易了。