У меня есть объект QML, который может создавать внутри него те же объекты. Функция addChildRect вызывается из C++. Каждый объект снабжен его уникальными id
и objectName
(для каждого объекта они одинаковы). Я хочу получить доступ к ним из C++, используя QObject::findChild
, , но для динамически созданного объекта эта функция всегда возвращает нулевой указатель. Мое предложение состоит в том, что эта функция анализирует только объекты, которые были в QML изначально. Как получить доступ к динамически созданным объектам из C++?Доступ к динамически созданным объектам QML из C++
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 спасибо за ваш ответ? правильно ли я вас понял, что я должен добавить «parent: this» в код построения объекта QML? Также не могли бы вы предоставить мне простой пример, как вернуть указатель из QML? – Lecko
См. Мой ответ ниже – folibis