我有一个QML对象,它可以在其中创建相同的对象。函数addChildRect从C++中调用。每个对象都提供有其独特的id
和objectName
(对于每个对象它们都是相同的)。我想使用QObject::findChild
,从C++访问它们,但对于动态创建的对象,此函数总是返回空指针。我的建议是,该函数只解析最初在QML中的对象。我怎样才能访问从C++动态创建的对象?从C++访问动态创建的QML对象
Rect.qml
Rectangle {
color: "red"
function addChildRect(id,x,y,width,height)
{
var component;
component = Qt.createComponent("Rect.qml");
component.createObject(this, {
id:id,
objectName:id,
x:x,
y:y,
width:width,
height:height});
}
}
C++代码:
//find element
auto parentRectView = engine.rootObjects().first()->findChild<QObject*>(QString::number(id()));
//create element
QMetaObject::invokeMethod(parentRectView,"addChildRect",
Q_ARG(QVariant,id()),
Q_ARG(QVariant,m_position.x()),
Q_ARG(QVariant,m_position.y()),
Q_ARG(QVariant,m_size.height()),
Q_ARG(QVariant,m_size.width()));
我想你应该为动态创建的对象设置父对象来查找是否使用'QObject :: findChild'。此外,为了避免不必要的操作,您可以将指向从addChildRect创建的对象的指针返回给C++ – folibis
@folibis感谢您的回答?我是否正确理解你,我应该在QML对象构造代码中添加'parent:this'? 也可以请你提供一个简单的例子,如何从QML返回指针? – Lecko
查看我的回答下面 – folibis