Document merged features that had no wiki coverage

Symbol editor background frame (#1164); configuration files and remembered
dialog sizes (#1166, #1165); ranked-list search option (#1083); crash-recovery
copies and crash reports in the FAQ (#1167, #1013, #1031, #1181); double-click
wire colour and one-text-per-sheet applying at once (#1172, #1191); cabinet
thumbnails (#1170); linked copies on paste/duplicate (#997); second click in a
group (#1110); align icons (#1153); uuid lookups for sheets, tables and symbol
texts (#1098, #1114); database filled from the document (#1142); value
suggestions and text-width handles (#1021, #591).
ispyisail
2026-10-02 14:30:46 +13:00
parent 3f935ee183
commit d7c8f65b6c
11 changed files with 233 additions and 2 deletions
+4
@@ -110,6 +110,10 @@ Items already on the grid stay exactly where they are.
| Centrer verticalement | *Centre vertically* | one horizontal line, through the average of their centres |
| Aligner en bas | *Align bottom* | the bottom-most bottom edge |
Each of these commands, and *Aligner sur la grille*, has its own icon in the
menu, the right-click menu, command search and the shortcut bar
([PR #1153](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1153), merged 2026-09-29).
With a single item selected the six commands are greyed out; only Snap to
grid is available. A single group counts as one item, however many things
are in it.
+23
@@ -36,6 +36,11 @@ tree, and **double-clicking** a symbol (or pressing **Enter** on it) places it
on the sheet instead of opening the element editor; a preference restores the
old behaviour. See **[Drawing faster](drawing_faster)**.
Prefer the filtered tree? Untick *Afficher les résultats de recherche sous
forme de liste triée* (*Show search results as a ranked list*) in
**Configurer QElectroTech > Général** ([PR #1083](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1083)). The search then
filters the tree as it did before, with the tree's own keyboard navigation.
---
## 2. The three collections, and which ones you can actually edit
@@ -140,6 +145,24 @@ collection on disk — that's the **Embedded** row above. This is what makes a
from your custom collection travel with it, correctly rendered, even though
the recipient has no such collection.
### Cabinet thumbnails
To lay out a cabinet you need a block for each device that says what it is.
Select symbols on a sheet, right-click, and choose **Générer une vignette
d'armoire** (*Generate cabinet thumbnail*). Every selected symbol that has
both a **manufacturer** and a **manufacturer reference** in its information
gets a thumbnail: a 120 × 30 frame showing those two values. The thumbnails go
into a **Cabinet thumbnails** folder of the project's embedded collection,
ready to drag onto a cabinet layout sheet.
- A device already in the folder is skipped, so running it again, or on
several copies of one device, adds nothing.
- The entry is hidden when no selected symbol has both values.
- Like anything embedded, the thumbnails travel inside the `.qet` file.
Since [PR #1170](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1170) (merged 2026-09-29); discussion
[#602](https://github.com/qelectrotech/qelectrotech-source-mirror/discussions/602).
---
See also: **[Elements XML](elements_XML)** ·
+20 -1
@@ -178,6 +178,15 @@ Conductors joined through elements form a **potential** — an equipotential net
"One text per sheet" is what stops the same wire number being repeated a dozen
times along one potential.
The setting that counts is the sheet's own, in the sheet's properties
(*activer l'option un texte par potentiel*). Since
[PR #1191](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1191) (merged 2026-10-01) the drawing follows it as soon as you
press OK: unticking shows the hidden wire texts, ticking hides the repeats.
Before, nothing changed until each wire was edited or the project reopened,
which made the option look broken (bugtracker #344). The project's own
setting, under the project properties' Conductors tab, still only applies to
sheets created afterwards.
### Single-line mode
Only drawn when the type is single-line:
@@ -355,7 +364,17 @@ What it does:
The swatch is greyed out when no sheet is open or the project is read-only.
**F2** still opens the colour picker for exactly one selected conductor, and
does nothing with several selected or none. For bulk changes across sheets by
does nothing with several selected or none.
**Double-click a colour to apply it.** In the colour dialog opened by **F2** or
by *Autre couleur…*, a double-click on a colour picks it and closes the
dialog, as OK does; a single click still only selects it
([PR #1172](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1172), merged 2026-09-30). This works where QElectroTech uses
Qt's own colour dialog — always on Windows. Where the desktop's own dialog is
shown instead (macOS, and Linux desktops such as GNOME or KDE), nothing
changes.
For bulk changes across sheets by
some other criterion, use **[Search & Replace](search_and_replace)**.
There are **no named conductor presets**. A project has a single default set of
+18
@@ -184,6 +184,24 @@ names.
> `elementeditor/max-parts-element-editor-list`, so it can be raised if you
> routinely draw elements that big.
### The background frame
The canvas is an endless grid of dots, which gives nothing to judge how big a
symbol will look on a real sheet. **Affichage ▸ Afficher le cadre de fond**
(*View ▸ Show background frame*), also a button on the view toolbar, draws a
dashed frame centred on the symbol's origin, the size of a default sheet's
drawing area: 1020 × 640.
**Affichage ▸ Taille du cadre de fond...** (*Background frame size*) sets
another width and height, for example the size of one cell or of the space a
symbol usually gets. Both settings are remembered between sessions; the frame
is off by default.
The frame is only drawn on screen. It is not saved in the symbol, and it does
not appear in an SVG export.
Since [PR #1164](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1164) (merged 2026-09-29).
---
## 7. Getting drawings in and out
+17
@@ -266,6 +266,23 @@ examples uses them.
---
## 6b. Copying linked elements
Copy and paste a coil **together with** its contacts (or a PLC master with its
slave I/O), or duplicate a whole sheet from the project panel's right-click
**Copier et coller** (*Copy and paste*), and the copies are linked **to each
other**, as the originals are. The originals keep their own links, and no copy
links back to an original. Before
[PR #997](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/997) (merged 2026-09-23) every copy arrived unlinked.
If only one side is copied — the contact without its coil — the copy comes in
unlinked, as before: there is nothing in the paste for it to link to. The
follow-up for cut and paste, where keeping the link to the *original* partner
would be right, is
[discussion #1174](https://github.com/qelectrotech/qelectrotech-source-mirror/discussions/1174).
---
## 7. Quick reference
| I want to… | Set |
+41
@@ -270,6 +270,47 @@ For very large projects (1000+ elements), performance may be limited.
See **[Issues](https://github.com/qelectrotech/qelectrotech-source-mirror/issues)** for bug reports.
### Q: QET crashed — how do I get my work back?
Every 20 minutes QElectroTech writes a crash-recovery copy of each open project
that changed since the last copy. If nothing changed, no copy is written, so a
big project that sits unchanged no longer freezes for a moment every 20
minutes ([PR #1013](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1013)).
It keeps **the last three copies** of each project, written in turn
([PR #1167](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1167), merged 2026-09-29). If a project was already damaged when
a copy was taken, that copy only replaces the oldest of the three, not your
only one.
At the next start after a crash, a window titled **Fichiers de restauration**
(*Recovery files*) lists each project with a drop-down of its copies. The
newest, marked *(la plus récente)* (*most recent*), is selected; pick an older
one if the newest is the broken one. The copies you did not pick are deleted.
A copy that cannot be read gives a warning instead of crashing QElectroTech
again ([PR #1031](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1031)).
This is separate from **autosave**, which saves the project itself on a timer
and is off unless you set an interval for *Sauvegarde automatique des
projets* (*Autosave projects*) in **Configurer QElectroTech > Général**.
### Q: What does a crash report contain?
After a crash, QElectroTech shows a report to send with your bug report. On
Windows it now says what went wrong and where ([PR #1181](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1181), merged
2026-09-30):
- the error by name, such as *access violation* or *stack overflow*, and for a
bad memory access the address used;
- where it happened, and the chain of calls that led there, one line per step
as `module+offset`;
- crashes from a failed check (`abort()`) or a fatal Qt error, which used to
leave no report at all.
Include the whole report when you report the crash: a developer with the same
build can turn each `module+offset` line into a function and line in the
source. Reports from Linux are unchanged.
### Q: QET won't start
**A:** Try:
+1
@@ -39,6 +39,7 @@ follow their symbols when the group moves, exactly as they do today.
| You do | What happens |
|---|---|
| Click any member | the whole group is selected |
| Click again on a member of a selected group, without dragging | only that member stays selected, to edit it on its own ([PR #1110](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1110)). A click on a symbol's own text counts as a click on the symbol |
| Drag a member | the whole group moves |
| Arrow keys, with the group selected | the whole group moves |
| Draw a selection rectangle that touches part of a group | the whole group is selected when you release the mouse |
+37 -1
@@ -47,6 +47,7 @@ Three more options in this group come with the features on
| *Double-cliquer dans la collection ouvre l'éditeur d'élément au lieu de l'insérer* — double-click in Collections opens the editor instead of placing the symbol | off (double-click places) | [PR #1042](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1042) |
| *Afficher les commandes près de la sélection* — a small command bar beside what you just clicked | **on** | [PR #1055](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1055) |
| *Gestes de la souris avec le bouton droit* — right-drag runs a command from a ring | **on** | [PR #1057](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1057) |
| *Afficher les résultats de recherche sous forme de liste triée* — a Collections search shows one ranked list. Untick it for the filtered tree search of older versions. The Insert picker and the shortcut bar stay ranked either way | **on** | [PR #1083](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1083) |
### Startup state
@@ -167,7 +168,9 @@ to commands. See **[3D mouse](3d_mouse)**.
- **No per-diagram auto-save interval.** QET writes a periodic
crash-recovery backup in the background, but its timing isn't a setting
— see the User Manual's note on this.
— see the User Manual's note on this, and
**[After a crash](faq#q-qet-crashed--how-do-i-get-my-work-back)** in the FAQ
for the three copies it keeps.
- **No project-wide "page size" setting** separate from the Sheet tab's
border configuration above — border rows/columns/size *is* the page
layout.
@@ -182,6 +185,39 @@ to commands. See **[3D mouse](3d_mouse)**.
the project. See **[Printing and exporting](printing_and_export)** §4 for
what it does to output.
## 6. Keeping your settings in a file
From the **Configuration** menu, below *Configurer QElectroTech*:
| Entry | Does |
|---|---|
| **Enregistrer la configuration sous...** (*Save configuration as*) | saves every setting to a `.conf` file |
| **Charger une configuration...** (*Load configuration*) | replaces your settings with a saved file, then **closes QElectroTech**; start it again to use them |
Use it to keep one set of settings per customer or drawing standard, to move
your settings to another computer, or to keep a copy before trying something.
The file is plain text in ini format, the same on every system.
- **Kept out of the file, and kept when loading:** window and dialog sizes and
positions, and the recent-files lists. They belong to the computer, not to
the way you work.
- **Loading replaces, it does not merge.** A setting the loaded file does not
have is removed, so switching from one saved configuration to another leaves
nothing of the first behind.
- Only files saved by QElectroTech are accepted.
Since [PR #1166](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1166) (merged 2026-09-29).
### Dialogs remember their size
Resize a dialog — this Preferences window, Search and Replace, Export and the
others — and it reopens at that size and place, also after restarting
QElectroTech. A dialog last left partly off-screen (a monitor unplugged, say)
reopens fully on screen. The recovery prompt and the image crop dialog keep
their fixed size. Since [PR #1165](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1165) (merged 2026-09-29), which also
fixed the PLC input/output table's *Type* column showing as light grey boxes
under a dark system theme.
---
See also: **[Project XML](project_XML)** · **[Linking elements](element_linking)** ·
+24
@@ -48,6 +48,7 @@ QETProject constructed
└── updateDB()
project XML read
└── updateDB() ← full repopulate, once, after everything is loaded
(read from the .qet document since PR #1142, see below)
user edits the diagram
└── addElement / removeElement / elementInfoChanged
addDiagram / removeDiagram / diagramInfoChanged / diagramOrderChanged
@@ -71,6 +72,29 @@ losing the whole thing costs nothing: it is rebuilt on the next open.
rebuild among them, so the cost on a given project can be read straight from
the console output rather than guessed at.
### Filled from the file, not from the built sheets
Since [PR #1142](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1142) (merged 2026-09-29), the full fill at load reads the
`.qet` document instead of walking the sheets QElectroTech has built. The
tables hold the same rows either way — a test fills them both ways on all 24
shipped examples and requires identical results — but the database no longer
needs every sheet built before it can say what is on them. That is the first
step towards opening a big project without building every sheet up front
(discussion [#1141](https://github.com/qelectrotech/qelectrotech-source-mirror/discussions/1141)).
- **Labels from formulas** are computed from the document too. The file keeps
the last computed value, which can be stale (`K%total-%id` saved as `K1-1`,
shown as `K3-1`), so the formula is evaluated again rather than the saved
text trusted.
- **A file that lacks something the fill needs** — older files without saved
uuids, or wires with a frozen formula text — falls back to the old way and
says why in the log.
- `QET_DATABASE_FROM_FOLIOS=1` in the environment forces the old way.
- **Not moved yet:** shapes, free texts and pictures still come from the built
sheets (text sizes need fonts). Opening is not faster yet.
The incremental updates while you edit are unchanged.
---
## 3. Schema
+31
@@ -206,6 +206,37 @@ qet.addConductor(0, coil, a2, lamp, qet.terminalIndex(0, lamp, "{77aa…}"));
symbol file's terminals. Every terminal of an opened project has one (see
[the project database](project_database), section 4).
### Find a sheet, text, shape, picture, table or symbol text by its uuid
Most calls name things by **position**: sheet 2, text 0, table 1. Positions
shift when something before them is added or removed, so a script that deletes
table 0 and then moves "table 1" moves the wrong one. Hold the uuid instead,
and turn it into the current position when you need it:
```js
qet.folioUuid(index) // -> "{…}", or ""
qet.folioIndex(uuid) // -> current index, or -1
qet.textIndex(folioIndex, uuid) // a free text, in qet.texts(folioIndex)
qet.shapeIndex(folioIndex, uuid) // a shape, in qet.shapes(folioIndex)
qet.imageIndex(folioIndex, uuid) // a picture, in qet.images(folioIndex)
qet.tableIndex(folioIndex, uuid) // a table, in qet.tables(folioIndex)
qet.elementTextIndex(folioIndex, elementUuid, textUuid)
// a symbol's text field, in qet.elementTexts(folioIndex, elementUuid)
```
Each returns `-1` when there is no such item.
- **Symbol text fields take the symbol too**, because copies of a symbol keep
their fields' uuids — in `2612_ats_singlephase.qet` one field uuid appears
on 20 copies.
- **Older files work too.** Most shipped examples save no sheet uuid; a sheet
gets one on load, the same on every load, written on the next save.
Since [PR #1098](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1098) (tables, symbol text fields) and
[PR #1114](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1114) (sheets), both merged 2026-09-28. The
[MCP server](mcp_server)'s `qet_items` lists every drawn item with its uuid.
### A sheet's wire defaults
> **Status: pending.** This section describes
+17
@@ -361,6 +361,13 @@ To add element label:
2. Set the reference (e.g., "Q1") in the label field
3. Confirm the dialog
**Values already used are suggested.** In the Informations tab, each field
(manufacturer, supplier, reference…) offers the values other elements in the
same project already use, as you type: matching ignores case and works
anywhere in the text, so "ard" finds "Arduino". Pick one instead of typing it
again. *Label* gets no suggestions, since a label names one element. Since
[PR #1021](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/1021) (bugtracker #217).
### Dynamic Text Fields
A dynamic text field can show a live value instead of fixed text — an
@@ -371,6 +378,16 @@ See **[Variables & formulas](variables)** for the full reference — it's
worth reading before guessing at a variable name, since an unrecognized one
is silently left as literal text rather than flagged as an error.
**Resizing a symbol's text box by dragging.** Select a text of a placed
symbol (its label, an information field, a composite text) and two handles
appear at its left and right edges. Drag one to set the text's width; a
rotated text resizes along its own direction. One undo step per drag, and
undo brings back automatic width if that is what it had. The width field in
the selection properties panel follows the drag. Free texts and texts inside
the element editor have no width yet, so no handles. Since
[PR #591](https://github.com/qelectrotech/qelectrotech-source-mirror/pull/591) (discussion
[#577](https://github.com/qelectrotech/qelectrotech-source-mirror/discussions/577)).
### Text Formatting
**Font & Style:**