This is a text-only version of the following page on https://raymii.org: --- Title : Log all Item properties and functions in Qml Author : Remy van Elst Date : 09-02-2022 URL : https://raymii.org/s/snippets/Log_all_Item_properties_and_functions_in_Qml.html Format : Markdown/HTML --- This small snippet of Javascript logs all properties and functions of a Qml Item. This is useful when you're knees-deep in a dynamic control that has a model and you're wondering why your code does not work. Probably because you're not using the correct property name. Or at least, that is something I often have. Logging all properties or functions helps to figure out that issue.
![demo program][1] > A demo program that logs functions and properties to the command line and a `TextArea` The code to log all properties is actually very simple: function listProperties(item) { var properties = "" for (var p in item) if (typeof item[p] != "function") properties += (p + ": " + item[p] + "\n") return properties } Same goes for logging all functions: function listFunctions(item) { var functions = "" for (var f in item) if (typeof item[f] == "function") functions += (f + ": " + item[f] + "\n") return functions } If you remove the `if(typeof...` then you get both in the output. Usage is simple, just pass the `id:` of an item you want to log: Button { id: logButton [...] text: "Log Properties" onClicked: { console.log(listProperties(logButton)) } } You could also use `JSON.stringify()` but I have seen recursive loops that crashed when using that, so this is my small goto snippet. ### Demo Qml Program Here's a small Qml demo program that logs either functions or properties to the command line and a `TextArea`. **main.qml** import QtQuick 2.15 import QtQuick.Controls 2.12 import QtQuick.Window 2.15 Window { width: 640 height: 480 visible: true title: qsTr("Log Properties Example") function listProperties(item) { var properties = "" for (var p in item) if (typeof item[p] != "function") properties += (p + ": " + item[p] + "\n") return properties } function listFunctions(item) { var functions = "" for (var f in item) if (typeof item[f] == "function") functions += (f + ": " + item[f] + "\n") return functions } Button { id: logButton anchors.top: parent.top anchors.left: parent.left anchors.margins: 50 objectName: "Raymii.org Example" text: "Log Properties" onClicked: { console.log(listProperties(logButton)) logTextarea.text = listProperties(logButton) } } Button { id: logFunctionsButton anchors.top: parent.top anchors.left: logButton.right anchors.margins: 50 text: "Log Functions" onClicked: { console.log(listFunctions(logFunctionsButton)) logTextarea.text = listFunctions(logFunctionsButton) } } ScrollView { id: propertyview anchors.top: logButton.bottom anchors.left: parent.left anchors.margins: 50 width: 500 height: 300 TextArea { id: logTextarea anchors.fill: parent placeholderText: "click the buttons" } } } **main.cpp** #include