diff --git a/aligning_items.md b/aligning_items.md index 672c0a4..d2de41f 100644 --- a/aligning_items.md +++ b/aligning_items.md @@ -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. diff --git a/collection_browser.md b/collection_browser.md index dbcafb5..eaa5dfe 100644 --- a/collection_browser.md +++ b/collection_browser.md @@ -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)** · diff --git a/conductors.md b/conductors.md index c0a0e3f..7f2f020 100644 --- a/conductors.md +++ b/conductors.md @@ -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 diff --git a/element_editor.md b/element_editor.md index 5164984..3084296 100644 --- a/element_editor.md +++ b/element_editor.md @@ -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 diff --git a/element_linking.md b/element_linking.md index 6ab062a..e7ebfb4 100644 --- a/element_linking.md +++ b/element_linking.md @@ -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 | diff --git a/faq.md b/faq.md index 19689c7..4c714c6 100644 --- a/faq.md +++ b/faq.md @@ -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: diff --git a/grouping_items.md b/grouping_items.md index 9db8838..468bc46 100644 --- a/grouping_items.md +++ b/grouping_items.md @@ -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 | diff --git a/preferences.md b/preferences.md index 57c6558..daa473d 100644 --- a/preferences.md +++ b/preferences.md @@ -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)** · diff --git a/project_database.md b/project_database.md index c6ad659..1713066 100644 --- a/project_database.md +++ b/project_database.md @@ -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 diff --git a/scripting.md b/scripting.md index 8aabb65..f11b15a 100644 --- a/scripting.md +++ b/scripting.md @@ -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 diff --git a/user_manual.md b/user_manual.md index e004d9e..716cb16 100644 --- a/user_manual.md +++ b/user_manual.md @@ -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:**