User:Tim.Jenssen/QML Puppet Rendering in Qt Design Studio: Difference between revisions
Jump to navigation
Jump to search
Tim.Jenssen (talk | contribs) (Created page with "== Architecture Overview == Qt Design Studio uses a dual-process architecture for QML editing. The main application (GUI, editors, views) talks over a local IPC channel to one or more QML Puppet processes that run headless QML engines and render the items off‑screen. {| class="wikitable" |+ Dual-process architecture |- ! QML Puppet Side<br>(QML runtime & rendering) ! Design Application Side<br>(QML document & editing UI) |- | * No visible window – renders into i...") |
Tim.Jenssen (talk | contribs) No edit summary |
||
Line 30: | Line 30: | ||
* non-visual view | * non-visual view | ||
* keeps track of '''NodeInstance''' objects | * keeps track of '''NodeInstance''' objects | ||
** live presentation of | ** live presentation of a QML item | ||
* on '''Model''' change it sends command '''to''' QML Puppet | * on '''Model''' change it sends command '''to''' QML Puppet | ||
* monitors the QML puppet’s state | * monitors the QML puppet’s state(restart on crash) | ||
|- | |- | ||
| | | |
Revision as of 11:43, 9 May 2025
Architecture Overview
Qt Design Studio uses a dual-process architecture for QML editing. The main application (GUI, editors, views) talks over a local IPC channel to one or more QML Puppet processes that run headless QML engines and render the items off‑screen.
QML Puppet Side (QML runtime & rendering) |
Design Application Side (QML document & editing UI) |
---|---|
QmlRuntime
NodeInstanceServer
|
FormEditorView
NodeInstanceView
|
NodeInstanceClientProxy
NodeInstanceClient
|
NodeInstanceServerProxy
|
Data Flow from ModelNode to Rendered Item
- ModelNode = QML DOM node without runtime.
- Wrapped by QmlItemNode / QmlObjectNode for Qt Quick semantics supplied by the QML Puppet.
- Qt Design Studio launches QML Puppet and calls
QQuickDesignerSupport::activateDesignerMode()
- disables animations & user input during design.
- Qt Design Studio sends a CreateSceneCommand containing the entire ModelNode hierarchy.
- Each node is paired with an InstanceContainer (type, id …).
- Puppet’s NodeInstanceServer builds real QObject / QQuickItem instances, importing required QML modules.
- Nodes such as States or Behavior can be skipped or handled specially.
- After instantiation QML Puppet returns:
- InformationChangedCommand – geometry, implicit size …
- PixmapChangedCommand – rendered image(s)
- Qt Design Studio NodeInstanceView matches the data by id, updates its NodeInstance cache and triggers a repaint in FormEditorScene.
- Rendering pipeline inside the QML Puppet:
- Scene graph driven manually via QQuickRenderControl
- Root item parented to an off‑screen content item inside the hidden QQuickWindow.
- Grabs whole window or individual items (grabToImage) into QImage`s.
- Large images are transferred through shared memory, and commands travel through a QLocalSocket stream.
Visual Representation Differences (QML Puppet vs Running App)
- Animations paused – timeline is frozen unless explicitly previewed.
- No real user input – mouse / key events are not forwarded by default.
- Native text AA disabled – to avoid platform‑specific artefacts.
- Single‑frame snapshot of OpenGL / particle effects – continuous effects are sampled at render time.
- Root item forced to (0 ; 0) – avoids clipping and simplifies layout.
- Composed by QGraphicsScene – Minor alpha‑blending or DPI rounding differences are possible.