@LegoGo

Почему parent->findchild("") не находит объекты, созданные Repeater'ом?

Если создать qml-объект так:
ToggleButton
{ objectname: "name_1"
text: "text"
}
То при вызове Object* obj1= this->parent()->findChild*>("name_1"); Создается непустой obj1 и можно изменить его свойства.
Если создать qml- объект как элемент Repeater:
Repeater
{ model: Model
ToggleButton
{ objectName: "name_"+index
text: model.modelData.text
}
}
В этом случае - qml-объекты выводятся, но через Object* obj1= this->parent()->findChild*>("name_1"); получаю obj1 = 0x0. Хотя - вывод в консоль из qml - (console.log("objectName:",objectName)) показывает, что objectName задан.
В чем может быть проблема?
  • Вопрос задан
  • 535 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Slava_d2000
Я только начал изучать qml могу ошибиться в ответе. На мой взгляд проблема в следующем, по определению индекс начинается с 0, а не с 1, а в параметре model задается количество повторений, в Вашем случае что такое Model ? это какое то числовое значение или что ? В результате выполнения кода у Вас создается один экземпляр ToggleButton с objectName = "name_0".
Ответ написан
Комментировать
MaxQwerty
@MaxQwerty
Linux, C++, Pyton, ML
Можете воспользоваться данным примером, чтобы получить полный дамп по объектам свойствам в дереве QML-объектов:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QMetaProperty>
#include <QList>

#include <QDebug>

void dumpQmlItemProperties(QObject* qmlItem)
{
    const QMetaObject* metaObj = qmlItem->metaObject();
    qDebug() << metaObj->className();
    for(int i=0; i<metaObj->propertyCount(); ++i)
    {
        QMetaProperty prop = metaObj->property(i);
        qDebug()
                 << prop.name()
                 << prop.read(qmlItem);
    }
}

void dumpQmlObjectsTree(QList<QObject*> qmlItems)
{
    QList<QObject*>::iterator it = qmlItems.begin();
    while(it != qmlItems.end())
    {
        qDebug() << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>";
        dumpQmlItemProperties(*it);
        qDebug() << "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<";
        dumpQmlObjectsTree((*it)->children());
        ++it;
    }
}

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    dumpQmlObjectsTree(engine.rootObjects());
    return app.exec();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы