Repository navigation
api_reference DE
Wie man QET aus anderen Programmen heraus steuert, und wie die XML-Dateien aufgebaut sind.
Korrektur, September 2026. FrΓΌhere Fassungen dieser Seite behaupteten, QElectroTech unterstΓΌtze Python-Skripte und ein Plugin-System, und wiesen Leser an, Plugins nach
~/.local/share/QElectroTech/plugins/und Entsprechendes zu installieren. Nichts davon existiert. Es gibt weder einen eingebetteten Interpreter noch eine Plugin-Schnittstelle noch ein Plugin-Verzeichnis β QET liest diese Pfade nie. Die folgende Seite beschreibt, was tatsΓ€chlich vorhanden ist. Das ist einiges, nur eben nicht das.
Was QET wirklich bietet:
| Eine Kommandozeile ohne OberflΓ€che | 13 Verben, die ein Projekt ΓΆffnen und exportieren, untersuchen oder neu schreiben, ohne GUI. Die eigentliche AutomatisierungsflΓ€che. |
| XML-Dateien |
.qet und .elmt sind gewΓΆhnliches XML, mit jedem Werkzeug les- und schreibbar. |
| Ein externes Begleitprogramm |
qet_tb_generator, aus einem MenΓΌeintrag gestartet. |
| C++-Quellcode | FΓΌr alle, die QET selbst oder einen Fork bauen. |
Was es nicht bietet: eingebettete Skripte in irgendeiner Sprache, eine Plugin-API, ein Verzeichnis ladbarer Module oder eine Automatisierungsschnittstelle zu einer laufenden Instanz.
Das ist der Teil, den die meiste Automatisierung nutzen sollte. Ein erkanntes Export-Flag wird vor dem Start der OberflΓ€che ausgewertet; der Prozess lΓ€uft ohne Anzeige, erledigt die Arbeit und endet β er ΓΆffnet kein Fenster und reicht nichts an eine bereits laufende Instanz weiter.
qelectrotech --export-pdf meinprojekt.qet ausgabe.pdfArgumente sind positionsgebunden, nicht --flag=wert. Die Form lautet stets
qelectrotech <flag> <projekt.qet> <ausgabe>, mit den beiden unten genannten
Ausnahmen.
| Flag | Ausgabe | Anmerkungen |
|---|---|---|
--export-pdf |
ein PDF | alle Folios, je eine Seite |
--export-png |
ein Verzeichnis | je ein NN_Titel.png pro Folio |
--export-svg |
ein Verzeichnis | je ein NN_Titel.svg pro Folio |
--export-bom |
CSV | StΓΌckliste, aus der Projektdatenbank β dieselbe Quelle wie der GUI-Export |
--export-wiring |
CSV | Von-Nach-Verdrahtungsliste, eine Zeile je Leiter β entspricht dem MenΓΌ Projekt β Verdrahtungsliste (Datenbank) / Verdrahtungsplan exportieren |
--export-cables |
CSV | dieselbe logische Liste, aber aus dem Dokument-XML gebildet |
--export-wires |
CSV | Leiternummern β entspricht dem MenΓΌ Projekt β Liste der Leiternamen exportieren |
--export-nets |
CSV | elektrische Netze β zu Potentialen gruppierte Klemmen |
--export-links |
CSV | Querverweise, mit Kennzeichnung unverknΓΌpfter Master und Slaves |
--info |
JSON | struktureller Abzug: Element- und Leiterzahlen je Folio, unverbundene Klemmen. Schreibt nach stdout, wenn kein Pfad angegeben ist |
--resave |
.qet |
lΓ€dt das Projekt und schreibt sein XML zurΓΌck |
--set-titleblock |
.qet |
trΓ€gt Schriftfeldwerte ein und speichert |
--check-elements |
Bericht | prΓΌft .elmt-Dateien β erwartet eine Datei oder ein Verzeichnis, kein Projekt |
Zwei zusΓ€tzliche Schalter:
-
--show-terminalsβ zeichnet Klemmenmarken und -namen in PDF-/PNG-/SVG- Ausgaben. StandardmΓ€Γig aus, passend zum Exportdialog der OberflΓ€che. NΓΌtzlich, um einen unverbundenen Anschluss sichtbar zu machen. -
--set-titleblocknimmt nach dem Ausgabepfad ZuweisungenschlΓΌssel=wertentgegen:date=todayoder ein ISO-DatumJJJJ-MM-TT, die Standard-SchriftfeldschlΓΌssel, oder jeden anderen SchlΓΌssel, der als benutzerdefiniertes Feld abgelegt wird. Fehlerhafte Zuweisungen scheitern, bevor irgendetwas geschrieben wird.
0 Erfolg Β· 1 die Arbeit schlug fehl (Projekt nicht zu ΓΆffnen, nichts zu
exportieren, Datei nicht beschreibbar) Β· 2 falsch aufgerufen (fehlendes
Argument, fehlerhafte Zuweisung). Damit lΓ€sst sich das Werkzeug direkt in einer
CI-Kette verwenden.
-
--export-cablesund--export-wiringsollen ΓΌbereinstimmen. Eines wird aus dem Dokument-XML gebildet, das andere aus der Projektdatenbank. Beide laufen zu lassen und zu vergleichen prΓΌft unmittelbar, ob die Datenbank das Projekt noch beschreibt β was sonst nur ΓΌber die OberflΓ€che sichtbar ist. - Setzen Sie in Skripten immer eine Zeitgrenze. Ein mit einer Γ€lteren Version gespeichertes Projekt lΓΆst beim Laden eine Warnung aus; im Kommandozeilenmodus werden Meldungsfenster automatisch beantwortet, doch ein unerwarteter modaler Dialog ist der klassische Weg, einen Lauf ohne OberflΓ€che dauerhaft hΓ€ngen zu lassen.
- Absturzsicherungen sind im Kommandozeilenmodus bewusst abgeschaltet: Ihr Schreibvorgang im Hintergrund konkurriert mit dem Prozessende.
-
QT_QPA_PLATFORM=offscreengenΓΌgt fΓΌr diese Verben. Xvfb wird nicht benΓΆtigt. -
Das ist auch QETs echte Antwort auf βDrahtbeschriftungen drucken".
QET hat keinen eingebauten Drucker fΓΌr Drahtmarkierungen/AderendhΓΌlsen
(siehe den Abschnitt Diagramme drucken im Benutzerhandbuch fΓΌr das, was
Drucken tatsΓ€chlich abdeckt). Der im Forum dokumentierte Arbeitsablauf
besteht darin, dieses CSV zu exportieren und in die eigene Software eines
Etikettendruckers einzuspeisen β Brady, WAGO Smart-Printer und die
Phoenix-Contact-Werkzeuge nehmen allesamt CSV direkt entgegen. Eine
bekannte EinschrΓ€nkung, von einem Schaltschrankbauer im Forum gemeldet:
Der Export liefert eine Zeile je Leiter ohne Mengenzusammenfassung, N
identische Etiketten erscheinen also als N doppelte Zeilen statt einer
Zeile mit Mengenspalte β vor dem Druck einer grΓΆΓeren Charge in einer
Tabellenkalkulation entdoppeln. Cembre-artige Drucker, die eine
.FNR-Datei oder eine Support-Code-Spalte brauchen, werden von diesem Export gar nicht erst erzeugt; diese Zuordnung muss von Hand aus dem CSV gebaut werden.
set -e
qelectrotech --set-titleblock in.qet gestempelt.qet indexrev=C date=today
qelectrotech --export-pdf gestempelt.qet "release/rev-C.pdf"
qelectrotech --export-bom gestempelt.qet "release/rev-C-bom.csv"Siehe auch die Kommandozeilen-Referenz.
.qet und .elmt sind XML. Alles, was XML verarbeiten kann, kann sie
verarbeiten β Pythons xml.etree, lxml, xmlstarlet, XSLT, ganz wie Sie
mΓΆgen. Das ist gemeint, wenn jemand sagt, er βskripte QETβ: Das Skript ist ein
eigenes Programm, das die Dateien liest und schreibt und neben QET lΓ€uft, nicht
darin.
<project title="ArduinoLCD" version="0.80">
<properties>
<property show="1" name="saveddate">17/04/2021</property>
</properties>
<newdiagrams>
<border rows="8" cols="17" rowsize="80" colsize="60" .../>
<inset folio="%id/%total" author="" title="" .../>
<conductors type="multi" .../>
<report label="%f-%l%c"/>
<xrefs>
<xref type="coil" master_label="%f-%l%c" slave_label="(%f-%l%c)" .../>
</xrefs>
</newdiagrams>
<diagram title="LCD 4 DATA" order="1" folio="%id/%total" cols="11" rows="7" ...>
<elements>
<element x="390" y="570" z="10" orientation="0"
type="embed://import/oznaczenia/tekst_08.elmt"
uuid="{52d4b9e8-05c3-49a2-8455-a42ff651200a}"
prefix="" freezeLabel="false">
...
</element>
</elements>
<conductors> ... </conductors>
</diagram>
<collection> ... </collection>
</project>Stolpersteine:
-
Es gibt keine HΓΌlle
<diagrams>.<diagram>-Knoten sind direkte Kinder von<project>, einer je Folio, geordnet ΓΌber ihr Attributorder. -
<element>hat keinid. Es wird ΓΌberuuididentifiziert, und sein Attributtypeist ein Ort, meistembed://β¦fΓΌr ein in die projekteigene Sammlung kopiertes Element. -
<newdiagrams>enthΓ€lt die Vorgaben fΓΌr neue Folios, nicht die Folios selbst. - Die Elementdefinitionen des Projekts liegen unter
<collection>; ein Projekt ist daher in der Regel in sich geschlossen.
VollstΓ€ndige Referenz: Project XML.
<definition version="0.90" type="element" link_type="master"
width="200" height="70" hotspot_x="100" hotspot_y="35">
<uuid uuid="{2cbd2b72-1d04-f03d-758f-ce3a14dbb3c5}"/>
<names>
<name lang="en">UPS</name>
<name lang="fr">UPS</name>
</names>
<kindInformations>
<kindInformation name="type">coil</kindInformation>
</kindInformations>
<informations>Author: RDS for QelectroTech</informations>
<description>
<rect x="0" y="0" width="460" height="590" style="..."/>
<terminal uuid="{73279019-β¦}" name="" x="-90" y="10" orientation="w" type="Generic"/>
</description>
</definition>Stolpersteine:
-
width,height,hotspot_x,hotspot_ysind Pflichtattribute von<definition>, und Breite/HΓΆhe mΓΌssen Vielfache von 10 sein β sonst rundet QET auf den nΓ€chsten Zehner auf. - Die uuid ist ein Attribut (
<uuid uuid="{β¦}"/>), nicht der Elementtext. -
<name>-EintrΓ€ge gelten je Sprache und brauchen einlang-Attribut. -
link_typemacht ein Element zum Master, Slave oder zur Klemme β siehe Elemente verknΓΌpfen.
VollstΓ€ndige Referenz: Elements XML.
Eine von Hand geschriebene Datei wird erst geprΓΌft, wenn QET sie ΓΆffnet β die Kommandozeile prΓΌft Elementdateien jedoch fΓΌr Sie:
qelectrotech --check-elements meine_elemente/Jede Datei wird als OK, WARN (lΓ€dt, aber verdΓ€chtig β etwa null Klemmen) oder
FAIL (nicht lesbar, falsches Wurzel-Tag, fehlender Begrenzungsrahmen) gemeldet,
und der RΓΌckgabewert ist bei jedem Fehlschlag ungleich null. GehΓΆrt in die CI,
wenn Sie .elmt-Dateien erzeugen.
- SchlieΓen Sie das Projekt in QET, bevor Sie seine Datei neu schreiben. QET hΓ€lt ein eigenes Modell im Speicher und ΓΌberschreibt Sie beim Speichern.
-
--resaveist ein billiger Normalisierer: laden, zurΓΌckschreiben, dann vergleichen β so sehen Sie, was QET stillschweigend umschreibt, bevor Sie ein Werkzeug auf eine Annahme ΓΌber das Markup stΓΌtzen. - Elemente und Leiter werden ΓΌber UUID identifiziert. Einen Elementknoten zu kopieren, ohne ihm eine neue uuid zu geben, erzeugt zwei Elemente, die QET fΓΌr dasselbe hΓ€lt.
Es gibt einen MenΓΌeintrag, Plugin zur Klemmenleistenerstellung starten, und
ein Programm dahinter. qet_tb_generator ist ein eigenstΓ€ndiges
Drittprogramm, ΓΌber PyPI verteilt, das .qet-Dateien von auΓen liest und
schreibt, um Klemmenleisten zu erzeugen.
python -m pip install --upgrade qet_tb_generatorQET startet es, indem es eine feste Liste von Orten durchsucht β
QETApp::dataDir() + "/binary/", das aktuelle Verzeichnis, ~/.qet/ und dann,
was PATH auflΓΆst β und es als gewΓΆhnlichen Kindprozess ausfΓΌhrt. Das ist die
gesamte Integration: kein gemeinsamer Speicher, keine API, keine RΓΌckrufe.
Liegt die ausfΓΌhrbare Datei auf keinem dieser Pfade, findet der MenΓΌeintrag sie
nicht.
UnterstΓΌtzung durch die Gemeinschaft gibt es im Forum: Skripte Β· Code/Programmierung
βEin Plugin schreibenβ heiΓt daher: ein eigenstΓ€ndiges Programm schreiben, das die Dateien bearbeitet, genau wie in Β§2 beschrieben. Es gibt keine Schnittstelle zu implementieren und kein Verzeichnis, in das man installiert.
Um QET selbst zu Γ€ndern oder einen Fork zu bauen:
- Doxygen-API-Dokumentation: https://de-backer.github.io/qelectrotech-source-mirror/html/pages.html
- Quellen: https://github.com/qelectrotech/qelectrotech-source-mirror
- Aus Quellcode bauen Β· Mitwirken
Orientierungspunkte, alle in sources/:
| Klasse | Datei | Rolle |
|---|---|---|
QETProject |
qetproject.cpp |
ein Projekt: Folios, Sammlung, Laden und Speichern |
Diagram |
diagram.cpp |
ein Folio (eine QGraphicsScene) |
Element |
qetgraphicsitem/element.cpp |
ein platziertes Symbol |
Conductor |
qetgraphicsitem/conductor.cpp |
ein Leiter |
Terminal |
qetgraphicsitem/terminal.cpp |
ein Anschlusspunkt |
projectDataBase |
dataBase/projectdatabase.cpp |
der Abfrage-Cache β siehe Die Projektdatenbank |
Man beachte die WortlΓΌcke: Die OberflΓ€che sagt Draht, Seite und Symbol, der Code sagt conductor, diagram und element. Nach dem OberflΓ€chenwort zu suchen ist der ΓΌbliche Weg, fΓ€lschlich zu schlieΓen, etwas sei nicht implementiert.
Deutlich gesagt, weil diese Seite zuvor das Gegenteil behauptete:
| Behauptung | Wirklichkeit |
|---|---|
| Eingebettete Python-Skripte | Es ist kein Interpreter eingebunden oder geladen. Jede Python-ErwΓ€hnung im Quellcode betrifft den Starter fΓΌr qet_tb_generator. |
| Ein Plugin-System / eine Plugin-Schnittstelle | Kein QPluginLoader, keine Plugin-ABI, nichts, was externen Code lΓ€dt. |
~/.local/share/QElectroTech/plugins/ und Entsprechungen |
QET liest diese Pfade nie. Sie anzulegen bewirkt nichts. |
| Eine Automatisierungs-API zu einer laufenden Instanz | Keine. SingleApplication reicht Dateiargumente an eine laufende Instanz weiter, mehr nicht. |
Ob QET eine Skriptschnittstelle bekommen sollte, ist eine offene Frage β siehe die Seiten Vision und Entwicklungs-Roadmap. Wenn es so weit ist, wird diese Seite es sagen β dann, wenn es stimmt, und nicht frΓΌher.
Getting Started
π Languages β English Β· FranΓ§ais Β· Deutsch
Windows without admin rights β the portable archive, no installer
Guides
Conductors β wire properties, what feeds which export, cables, and hops where wires cross
Wires per terminal β limit the wires on a terminal, chain wiring instead of stars
Printing and exporting β paper, PDF, images, and what each path does differently
Linking elements β master, slave, terminal
PLC modules β I/O tables and linking a wire to a specific point
Using the element editor β drawing tools, saving, checks
Grid size and element size β why symbols aren't all the same scale, and scaling one without leaving the grid
Preferences reference β what each settings page does
Saving and loading settings β your whole setup in one file, to copy or keep
Keyboard-only control β mouseless QET, and what still needs a mouse
Mouse modifiers β what Shift, Ctrl and Alt change while you drag
3D mouse β SpaceMouse pan, zoom and buttons
Aligning items β snap symbols back to the grid, or line them up
Pictures on a sheet β labels, crop, transparency, what they cost in the file
Arcs and curved wires β the Arc tool, pulling an arc in or out, rounding a corner with a fillet, dashed arcs for lighting layouts
Grouping items β select, move and copy several items as one
Finding your place on a sheet β go to a cell like B13 or 4-B7, keep the headers in sight, show the cell limits, zoom and pan
Showing and hiding kinds of items β hide texts, wire numbers, shapes, pictures, tables or cross-references on every sheet
Drawing faster β place without dragging, the S shortcut bar, command search, gestures
Customising QElectroTech β keys, toolbar size and contents, the gesture ring (partly pending)
Managing collections β folders, writability, building your own shortlist
Templates β reusable multi-element blocks, placed by double-click or drag
Search & Replace β bulk property changes
Building a nomenclature query β the BOM/summary table builder
Linking wires across pages β sheet reports
Variables & formulas β %f, %{label}, sequences
Auto-numbering β schemes, sequences, freezing
Terminal strips β strips, levels, bridges
Title block templates β the .titleblock format
Importing EPLAN parts (.edz) β EPLAN Data Portal
DXF import & export β two unrelated features, one format; command-line export and layers
The project database β the in-memory SQLite cache
Development
Automating QET β CLI, XML formats, external tools
CLI Reference β command line usage
JavaScript Scripting β --run, geometry editing, undo
MCP server β let an AI assistant read, verify and edit projects
Connecting an AI assistant β setup for Claude, Copilot, Gemini, Codex, Cursor, LM Studio
Script buttons β stored scripts with an icon, by hand or by an assistant
Live mode β an assistant working in the open project while you watch
Macro recorder β record a task by hand, for an assistant to script
Vision β proposal, under discussion
