[Development] Making QObject::dumpObjectTree() and QObject::dumpObjectInfo() invokable
Mitch Curtis
mitch.curtis at qt.io
Tue Mar 6 11:50:14 CET 2018
From: Development [mailto:development-bounces+mitch.curtis=qt.io at qt-project.org] On Behalf Of Pierre-Yves Siret
Sent: Tuesday, 6 March 2018 11:29 AM
To: André Somers <andre at familiesomers.nl>
Cc: Qt development mailing list <development at qt-project.org>
Subject: Re: [Development] Making QObject::dumpObjectTree() and QObject::dumpObjectInfo() invokable
2018-03-06 11:12 GMT+01:00 André Somers <andre at familiesomers.nl<mailto:andre at familiesomers.nl>>:
On 06/03/2018 11:04, Mitch Curtis wrote:
https://codereview.qt-project.org/#/c/221758/ makes QObject::dumpObjectTree() and QObject::dumpObjectInfo() invokable so that they can be used from QML. I think that this could be useful to debug issues, but being such a widely used and important class, I'm a bit unsure about whether it's worth the extra overhead. Here's what Olivier has to say about the overhead (taken from the review comments):
"The overhead here is that QObject, which is the base class of all objects, gets two more methods. (out of the 4 it has currently.) This means that QMetaObject::invoke might be slightly slower if it does not find the method. (But since it is currently not really optimized right now, i don't think we should care about this.) I don't know what that means for QML lookups, but probably does not matter."
So, I'm wondering what others think.
Would you use these from QML?
Would these be better off as a helper function in the Qt singleton? E.g. Qt.dumpObjectTree(object) and Qt.dumpObjectInfo(object).
_______________________________________________
Development mailing list
Development at qt-project.org<mailto:Development at qt-project.org>
http://lists.qt-project.org/mailman/listinfo/development
To be honest: no, I would probably never use them from QML. Nor do I use often from C++ either. I usually resort to external tooling such as GammaRay that give me all these methods can give me and much, much more.
André
_______________________________________________
Development mailing list
Development at qt-project.org<mailto:Development at qt-project.org>
http://lists.qt-project.org/mailman/listinfo/development
I won't either, I just tried it and it gave me too low-level information that I can't really exploit afterwards. I don't see a usecase where that'll help me, maybe you do?
I prefer my low-tech solution of recursively iterating the children or resources lists from QML or like André said, external tooling like GammaRay.
A helper function seems like a good compromise if it's needed.
Thanks for the feedback guys.
With regards to it giving too low-level information, I’m not sure what you mean. The idea is to be able to see the children of an object/item, so output matching that description would be on exactly the right level. :)
It seems to give more information than recursively iterating the children from QML:
import QtQuick 2.7
import QtQuick.Controls 2.3
ApplicationWindow {
visible: true
width: 640
height: 480
function printTree(item, indent) {
if (indent === undefined)
indent = 0
else
++indent
if (indent === 0)
print(item)
for (var childIndex = 0; childIndex < item.children.length; ++childIndex) {
var pad = ""
for (var i = 0; i < indent; ++i)
pad += " "
print(pad, item.children[childIndex])
printTree(item.children[childIndex], indent)
}
}
StackView {
id: stackView
initialItem: Button {
Image {}
}
Component.onCompleted: {
stackView.dumpObjectTree()
printTree(stackView)
}
}
}
Output from dumpObjectTree():
QQuickStackView::
QQuickTransition::
QQuickTransition::
QQuickTransition::
QQuickTransition::
QQuickTransition::
QQuickTransition::
QQuickButton::
QQuickImage::
QQuickRectangle::
QQmlComponentAttached::
Output from printTree():
qml: QQuickStackView(0x25e95f08020)
qml: QQuickButton(0x25e95f09100)
qml: QQuickImage(0x25e95f08890)
qml: QQuickRectangle(0x25e95f091f0)
The idea is not necessarily to print the QObjects, but since there was already a function that printed everything (dumpObjectInfo()), I figure it would be simple enough to expose it to QML.
Shawn has a similar patch that is aimed at items:
https://codereview.qt-project.org/#/c/193285/
The use case that led me to push the patch was a focus issue, if I remember correctly. An unnamed (no objectName) item had focus, and I couldn’t see where it came from.
I’m starting to lean towards a singleton helper for this, if we went ahead with it at all.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20180306/e1f0b2f2/attachment.html>
More information about the Development
mailing list