How to access QML Repeater delegate items in C++?
-
//// C++
void MyViewModel::doAccessRepeater() { QObject* rootObject = QQmlApplicationEngine_->rootObjects().first(); QObject* repeater = rootObject->findChild<QObject*>("SelectionButtonRepeater"); /// Returned a valid pointer QObject* item0 = repeater->findChild<QObject*>("SelectionViewRow0"); /// returns null ... }/// QML
Repeater { objectName: "SelectionButtonRepeater" model: (viewModel === null) ? "" : viewModel.list Text { width: parent.width height: 40 objectName: ("SelectionViewRow" + index) text: modelData } } -
Use the signals for adding and removing items from the repeater:
https://doc.qt.io/qt-5/qml-qtquick-repeater.html#signals
Have it add those to a list in C++ via the Connections object.@fcarney
via the itemAt() method// int count = QQmlProperty::read(repeaterObj, "count").toInt(); QQuickItem* item; int index = 0; QMetaObject::invokeMethod(repeaterObj, "itemAt", Qt::DirectConnection, Q_RETURN_ARG(QQuickItem*, item), Q_ARG(int, index));If it throws a warning/error for
QQuickItem*in the Q_RETURN_ARG, try withQObject*instead and cast it to aQQuickItempointer usingqobject_cast<QQuickItem*>(item) -
Use the signals for adding and removing items from the repeater:
https://doc.qt.io/qt-5/qml-qtquick-repeater.html#signals
Have it add those to a list in C++ via the Connections object. -
Use the signals for adding and removing items from the repeater:
https://doc.qt.io/qt-5/qml-qtquick-repeater.html#signals
Have it add those to a list in C++ via the Connections object.@fcarney
via the itemAt() method// int count = QQmlProperty::read(repeaterObj, "count").toInt(); QQuickItem* item; int index = 0; QMetaObject::invokeMethod(repeaterObj, "itemAt", Qt::DirectConnection, Q_RETURN_ARG(QQuickItem*, item), Q_ARG(int, index));If it throws a warning/error for
QQuickItem*in the Q_RETURN_ARG, try withQObject*instead and cast it to aQQuickItempointer usingqobject_cast<QQuickItem*>(item) -
@fcarney
via the itemAt() method// int count = QQmlProperty::read(repeaterObj, "count").toInt(); QQuickItem* item; int index = 0; QMetaObject::invokeMethod(repeaterObj, "itemAt", Qt::DirectConnection, Q_RETURN_ARG(QQuickItem*, item), Q_ARG(int, index));If it throws a warning/error for
QQuickItem*in the Q_RETURN_ARG, try withQObject*instead and cast it to aQQuickItempointer usingqobject_cast<QQuickItem*>(item)@raven-worx thanks. it works.!
Thank you all for ur supports.