Hi list, import QtQuick import QtQuick.Window import QtQuick.Layouts
Window { width: 640 height: 480 visible: true title: qsTr("Hello World") component Foo : Text { required property int index text: "Item " + index } ColumnLayout { id: layout Repeater { model: 10 delegate: Foo {} } } MouseArea { anchors.fill: layout onClicked: function(mouse) { const item = layout.childAt(mouse.x, mouse.y); if (item) { const index = item.index; console.log("clicked", item, "index", index) } } } } This will create ten instances of Foo. On clicking an item this prints something like "qml: clicked Foo(0x600000a07e20) index 6" to the console. So far so good. Now qmllint rightfully complains: Warning: Main.qml:29:36: Member "index" not found on type "QQuickItem" [missing-property] I'd like to coerce item to be "Foo", but it seems there is no such thing like type casting in Qml's javascript world: const item = layout.childAt(mouse.x, mouse.y) as Foo; // doesn't work (item is null then). const item : Foo = layout.childAt(mouse.x, mouse.y); // Type annotations are not permitted in variable declarations The only solution I've found so far is using an interim Qml property: MouseArea { property Foo clickedItem anchors.fill: layout onClicked: function(mouse) { clickedItem = layout.childAt(mouse.x, mouse.y); if (clickedItem) { const index = clickedItem.index; console.log("clicked", clickedItem, "index", index) } } } This makes qmllint happy. It doesn't even complain about "clickedItem = true" (only runtime error "Error: Cannot assign bool to Main_QMLTYPE_1_1*"). Any better ideas? Nils _______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest