SUMMARY In the Skanpage application (https://invent.kde.org/utilities/skanpage) I use the Kirigami.FormLayout to display all scanner options. These options depend on the scanning device that is opened and are removed and re-added when a new scanning device is selected. Removing the option items generate a large amount of errors in Kirigami.FormLayout. There are no visible issues and the FormLayout continues to work as expected. I suspect that it is due to the items of the model being deleted, which is probably not handled in the FormLayout? Corresponding QML code is at https://invent.kde.org/utilities/skanpage/-/blob/master/src/OptionsWindow.qml STEPS TO REPRODUCE 1. Open Skanpage 2. select a scanning device if needed 3. reselect a scanning device OBSERVED RESULT Kirigami.FormLayout spills errors. EXPECTED RESULT No errors generated
The QML errors are of following nature. In total, there are about 1300 errors when a scan device is reselected during my testing file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:375: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:377: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:382: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:384: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:237: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:373: TypeError: Cannot read property 'enabled' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:374: TypeError: Cannot read property 'visible' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:380: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:260: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:117: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:401: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:322: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:323: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:325: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:326: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:328: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:329: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:332: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:333: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:316: TypeError: Cannot read property 'enabled' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:317: TypeError: Cannot read property 'visible' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:320: TypeError: Cannot read property 'implicitWidth' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:321: TypeError: Cannot read property 'implicitHeight' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:375: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:377: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:382: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:384: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:237: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:373: TypeError: Cannot read property 'enabled' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:374: TypeError: Cannot read property 'visible' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:380: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:260: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:117: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:401: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:322: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:323: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:325: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:326: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:328: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:329: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:332: TypeError: Cannot read property 'Layout' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:333: TypeError: Cannot read property 'Kirigami' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:316: TypeError: Cannot read property 'enabled' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:317: TypeError: Cannot read property 'visible' of null file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:320: TypeError:
Ok, so I think I've found the source of the problem. The relayoutTimer function adds new children to the knownItems, buddies arrays etc., but never removes them in case a child gets deleted. So the knownItems etc. still contains pointers to invalid items in case a child is removed.