summaryrefslogtreecommitdiffstats
path: root/src/generators
diff options
authorShawn Rutledge <shawn.rutledge@qt.io>2023-05-31 22:48:44 +0200
committerShawn Rutledge <shawn.rutledge@qt.io>2023-07-05 19:40:57 +0000
commit75a6949d68af37ca8d8f97d4e2f7467e139ad323 (patch)
tree84b64bca5bc367d2e24f3e1cf3904c2d904461c5 /src/generators
parente6a2eb1eafdcdb9f493370fc211e483804a78184 (diff)
Add ObjectInstances.findQuickWindow and passive-instrumenter exampleHEADmaster
This is a means of instrumenting any pure-QML application to generate an object diagram showing the items and related objects belonging to the first top-level window that can be found. Using a Timer for that is kindof crude; perhaps we should rather have a separate WindowFinder object that can emit a signal when a new top-level window is discovered, or something like that. Or use a Shortcut to trigger it manually. But it works well enough for now. Change-Id: Ib2d82dfd6fbd4da4b46fbaadb08de2c5e649ffe6 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/generators')
-rw-r--r--src/generators/objectinstances.cpp18
-rw-r--r--src/generators/objectinstances_p.h2
2 files changed, 20 insertions, 0 deletions
diff --git a/src/generators/objectinstances.cpp b/src/generators/objectinstances.cpp
index e781691..9fea31a 100644
--- a/src/generators/objectinstances.cpp
+++ b/src/generators/objectinstances.cpp
@@ -7,6 +7,7 @@
#include <QDateTime>
#include <QDebug>
#include <QFile>
+#include <QGuiApplication>
#include <QQuickItem>
#include <QStringList>
#include <private/qobject_p.h>
@@ -145,6 +146,23 @@ void ObjectInstances::generate()
}
}
+/*!
+ Returns the first instance of a QQuickWindow that can be found within the
+ same process.
+
+ This is useful when you use the qml tool to instrument a pre-existing
+ unmodified QML file that has a top-level Window or Item: see
+ \c examples/objectInstancesTimer.qml
+*/
+QQuickWindow *ObjectInstances::findQuickWindow()
+{
+ for (auto *win : qGuiApp->topLevelWindows()) {
+ if (auto *qwin = qobject_cast<QQuickWindow *>(win))
+ return qwin;
+ }
+ return nullptr;
+}
+
void ObjectInstances::writeDot(const QString &plainFilePath, const QObject *o)
{
QString filePath = plainFilePath + u".dot"_s;
diff --git a/src/generators/objectinstances_p.h b/src/generators/objectinstances_p.h
index 7630743..142d84e 100644
--- a/src/generators/objectinstances_p.h
+++ b/src/generators/objectinstances_p.h
@@ -6,6 +6,7 @@
#include <QFile>
#include <QQmlEngine>
+#include <QQuickWindow>
QT_BEGIN_NAMESPACE
@@ -44,6 +45,7 @@ public:
void setRoot(QObject *newRoot);
Q_INVOKABLE void generate();
+ Q_INVOKABLE QQuickWindow *findQuickWindow();
ColorSource nodeColorSource() const;
void setNodeColorSource(ColorSource newNodeColorSource);