Compare commits

..

30 Commits

Author SHA1 Message Date
Laurent Trinques c85276f61b Merge pull request #1009 from ispyisail/fix/1002-resize-handle-artefacts
Linux build and tests / Build and test (Qt 6, Debug) (push) Failing after 6m31s
Fix green fragments left behind when moving or zooming an element (#1002)
2026-09-24 10:17:53 +02:00
ispyisail f3a31c291f Fix green fragments left by text resize handles when moving an element
The two width-resize handles added in #591 were free scene items, moved
with setPos() from inside DynamicElementTextItem::paint(). Moving an item
while the view is painting is outside what QGraphicsView's partial
repaint tracks: the handle was drawn only where the current repaint band
overlapped it, and its old position was not reliably cleared. Moving or
zooming a selected element left green slivers on the folio (#1002).
Since 29d16c333 the handles show on every text of a selected element,
so any ordinary element move triggered it.

Make the handles children of the text instead. Qt then moves and
repaints them together with the element, in local coordinates, and
their position only needs updating when the text's size changes, which
documentSizeChanged reports (text, font, width, undo of a resize).
This also takes paint() out of the handle logic entirely.

Reproduced on Linux (Xvfb), so the issue is not Windows-specific.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 19:46:26 +12:00
Laurent Trinques a06220e8dc Merge pull request #1008 from ispyisail/fix/1004-element-preview-cache
Fix #1004: element preview stays stale after editing until the collection reloads
2026-09-24 09:28:33 +02:00
Laurent Trinques 79990e40ee git submodule update --remote elements 2026-09-24 04:26:56 +02:00
Laurent Trinques e1e7ea4888 Merge pull request #1006 from ispyisail/i18n/ui-phrasebooks-29-languages
Add translation suggestions for the interface to 29 phrase books
2026-09-24 04:24:08 +02:00
Laurent Trinques 54b8fe5df4 Merge pull request #1007 from elevatormind/restore-sqlite-dependencies
Restore last sqlite dependencies
2026-09-24 04:02:28 +02:00
Laurent Trinques be0d214b75 Merge pull request #1005 from ispyisail/fix/1002-conductor-color-equipotential
Fix #1002: conductor colour toolbar swatch only recolours one wire segment
2026-09-24 04:01:13 +02:00
ispyisail 2f988e6e2c Refresh cached element preview after saving from the editor
Editing an element already in the user collection, saving, and closing
the editor left the old thumbnail in the elements panel until the
whole collection was reloaded. ElementsLocation::icon() serves the
preview from two caches keyed by path+uuid -- ElementPictureFactory's
in-memory picture cache and ElementsCollectionCache's on-disk SQLite
cache -- and neither was ever told the file changed.

QETElementEditor::toLocation() writes the new XML and returns;
ElementsCollectionWidget::locationWasSaved() then refreshes the panel
item, but it reads the icon through the same two stale caches, so the
refresh was a no-op. slot_reloadElementDrawings() already shows the
correct invalidation call for ElementPictureFactory; this wires the
same pattern, plus a matching refresh of ElementsCollectionCache's
row, into the save path itself.

Fixes the preview half of #1004. The paste-cursor-jump half of that
report is a live design disagreement between two recent commits from
a different contributor and is written up separately rather than
fixed here.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 12:09:01 +12:00
Magnus Hellströmer 9786006ca4 fix(database): align sqlite3 forward declarations 2026-09-23 21:45:16 +02:00
ispyisail 91e8956734 Add translation suggestions for the interface to 29 phrase books
Fills lang/phrase/qet_fr_xx.qph for every language QET ships, following
on from discussion #873. A phrase book is never compiled into what
ships -- a translator opens it in Qt Linguist and sees a suggestion
already filled in, to accept or correct.

Only ever appends. phrasebook.write() skips any source string already
in the file (case-insensitive), so no existing entry -- human or
machine -- is touched. 24 languages had no phrase book at all before
this; the other 5 (da, de, nl, ru, sv) keep every line they had.

Built and run with tools/qet-i18n in the qelectrotech-docker harness
(DeepSeek Flash). Companion to qelectrotech-elements#82, which does the
same for the element collection.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 07:34:47 +12:00
ispyisail 6fad3390df Fix issue #1002: conductor-colour toolbar swatch skips the rest of the potential
ConductorColorToolButton::applyColor() only recoloured the selected
Conductor objects. A wire drawn across a junction is several separate
Conductor segments sharing one electrical potential, so selecting one
segment and picking a colour left the rest of the wire its old colour
-- visible only by falling back to F2/double-click, which already
expands to relatedPotentialConductors() for exactly this reason
(ConductorPropertiesDialog, and QetScriptApi::setConductorProperty).

Expand each selected conductor to its potential before building the
undo command, matching that existing pattern.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 07:08:31 +12:00
Magnus Hellströmer 231ab990c3 Revert "refactor: use VACUUM INTO for database export"
This reverts commit 27dea3ffab.
2026-09-23 20:18:25 +02:00
Laurent Trinques f10275cb22 Merge pull request #997 from ispyisail/revive/659-preserve-links
Linux build and tests / Build and test (Qt 6, Debug) (push) Failing after 2m15s
Preserve master/slave links when pasting or duplicating a folio
2026-09-23 18:40:34 +02:00
Laurent Trinques 3d0e7a27a3 Merge pull request #998 from ispyisail/revive/785-case-insensitive-flags
Make auto_num_locked/potential_isolating case-insensitive
2026-09-23 18:38:38 +02:00
Laurent Trinques f14278324c Merge pull request #995 from ispyisail/revive/713-collection-cancel-race
Cancel the collection-loading map before waiting on it in ~ElementsCollectionModel
2026-09-23 18:36:17 +02:00
Laurent Trinques d5318eb7b4 Merge pull request #996 from ispyisail/revive/682-nonfinite-coordinates
Reject non-finite values in QET::attributeIsAReal()
2026-09-23 18:34:57 +02:00
Laurent Trinques f10ef3ded7 Merge pull request #994 from ispyisail/revive/664-element-info-orphan
Fix element_info orphan row causing UNIQUE constraint errors on undo
2026-09-23 18:33:05 +02:00
Laurent Trinques 6f7ea63589 Merge pull request #1000 from ispyisail/fix/933-german-source-strings
Fix bugtracker #933: German source string and comments in templates code
2026-09-23 18:26:45 +02:00
Laurent Trinques 9a6029a2bb Merge pull request #1001 from Kellermorph/plc-table-size
Plc table size
2026-09-23 18:24:15 +02:00
Laurent Trinques bc0ca56c7e Merge pull request #999 from ispyisail/fix/ci-missing-libsqlite3-dev
CI: install libsqlite3-dev, required by PR #983's find_package(SQLite3)
2026-09-23 18:22:47 +02:00
Laurent Trinques 1d4c0326d4 Merge pull request #1003 from qelectrotech/revert-986-no-sqlite
Linux build and tests / Build and test (Qt 6, Debug) (push) Failing after 1m55s
Revert "fix: harden project database export"
2026-09-23 13:51:07 +02:00
Kellermorph 3457a88e81 Open the PLC master properties dialog at three times its width
Element::editProperty() gave PropertiesEditorDialog no size of its own,
so the dialog fell back to its sizeHint, which is sized for the compact
general-purpose editors it usually hosts. A PLC master instead shows a
six-column IO table that grows horizontally, and the dialog came out
too narrow to read those columns in.

For a master whose type is PLC, resize the dialog to three times its
natural width before exec(), keeping the natural height. The width is
clamped to the available screen so it cannot run off the display, and
every other element type opens exactly as before.
2026-09-23 10:28:00 +02:00
Kellermorph 4e361f93fe Let the PLC master IO table columns be resized, and remember the layout
The IO table of MasterPropertiesWidget -- the panel that opens when a
PLC master placed on a schematic is edited -- set every section to
QHeaderView::Stretch. Stretch spreads the sections evenly over the
widget and disables section dragging altogether, so the column
boundaries were permanently fixed: they could be neither widened nor
narrowed, and only the width of the whole panel had any effect.

Use QHeaderView::Interactive instead, with movable sections and a set
of default widths, so the columns can be dragged as they are everywhere
else in the application. The layout reached this way is written to
QSettings under masterpropertieswidget/plc-table-header-state on every
sectionResized and sectionMoved, and restored the next time the table
is built -- the same header-state trick the free and linked element
trees of this widget already use, except saved automatically rather
than only from the context menu.
2026-09-23 10:27:50 +02:00
ispyisail 6a8838e719 Fix bugtracker #933: German source string and comments in templates code
sources/ElementsCollection/fileelementcollectionitem.cpp had a German
tr() source string ("Makros") in a project whose source language is
French/English elsewhere. Renamed to "Macros" (identical in both
languages, so no translation catalog change is needed). Translated
three German-language comments in elementscollectionmodel.cpp and
diagramview.cpp to English.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 17:31:38 +12:00
ispyisail 774f803626 CI: install libsqlite3-dev for find_package(SQLite3 REQUIRED)
PR #983 added a hard SQLite3 system dependency to CMakeLists.txt, but
the workflow only installed libqt6sql6-sqlite (Qt's runtime driver
plugin), not the C headers/library find_package(SQLite3) needs. Every
PR based on current master has been failing CI with "Could NOT find
SQLite3" since #983 merged.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 17:02:36 +12:00
ispyisail 5b0785fcce Make auto_num_locked/potential_isolating case-insensitive
Reviving the still-relevant part of #785, closed 2026-09-10 purely to
clear a review backlog, not on merit. Investigated fresh against
current master -- one of the original PR's three targets turned out
to already be fixed independently: element_nomenclature_view's SQL
predicate for exclude_from_bom already does
"COALESCE(LOWER(TRIM(ei.exclude_from_bom)), '') NOT IN ('true', '1',
'yes', 'on')" (projectDataBase::createElementNomenclatureView()).

auto_num_locked and potential_isolating had no equivalent: five call
sites across terminal.cpp, terminalnumberingdialog.cpp and
elementinfowidget.cpp compared the raw stored string against the
literal "true" with QString::operator==, silently treating "True",
"TRUE", a trailing space, or any value written by something other
than this app's own checkbox as off -- with no error and no visible
difference from the checkbox being genuinely unticked.

Added QET::infoFlagIsTrue(), matching the same accepted spellings
("true"/"1"/"yes"/"on", case-insensitive, trimmed) the SQL predicate
already uses, and switched all five call sites to it.

Verified the exact comparison logic in isolation, outside any QET
build: 15 cases including "True", "TRUE", padded whitespace, "1",
"yes", "on", and their false counterparts -- all correctly
discriminated. Qt 6.10.2, ctest 13/13.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 16:47:07 +12:00
ispyisail de9b3eae06 Preserve master/slave links when pasting or duplicating a folio
Reviving #659, closed 2026-09-10 purely to clear a review backlog
(#630), not on merit. Rebuilt fresh against current master rather than
merged from the old branch (elementspanelwidget.cpp had drifted enough
that a textual merge risked silently losing content, as it did earlier
in this same session for a different revival). Builds discussion #607.

Cutting/copying a linked group of elements -- a relay coil with its
contacts, a PLC master with its slave I/O elements -- dropped the
master/slave link entirely. Traced end to end: Element::toXml() writes
each partner's uuid into <link_uuid>, Element::fromXml() reads it back
into a deferred, unresolved buffer (tmp_uuids_link), and the only code
that ever resolves that buffer is initLink(QETProject *) -- called
only from Diagram::refreshContents(), itself only called from full
project load and macro-block insertion. Neither DiagramView::paste()
nor ElementsPanelWidget::duplicateDiagram() ever call it, so
tmp_uuids_link is populated correctly and never resolved: the link is
silently dropped. duplicateDiagram() already knew this and worked
around it by calling clearPendingLinks() -- correct to not link back
to a stale source, but it meant folio duplication never preserved a
link either.

Added Element::initLink(const QList<Element *> &candidates) --
resolves against a caller-supplied list instead of a project-wide
search. The scoping is the subtle part: right after the XML round-trip
and before uuids are renewed, a pasted/duplicated element's
tmp_uuids_link still holds its source's original partner uuid, which
at that exact moment still equals the not-yet-renewed uuid of that
partner's own copy, if it was carried along in the same batch.
Resolving only within the batch is what stops a linked pair pasted
together from matching an original element left elsewhere that
happens to still carry that same soon-to-be-replaced uuid. If only one
half of a linked group is in the batch, its entry finds no match and
is dropped -- the same "leave it unlinked" outcome as before.

Wired into PasteDiagramCommand::redo(), before the existing newUuid()
loop and gated by the same first_redo flag. Wired into
duplicateDiagram() the same way, replacing its clearPendingLinks()
call (initLink() clears tmp_uuids_link internally, matched or not).

Verified live -- the original PR's own test plan left both of these
unchecked, so this closes that gap rather than repeating it. Built a
project with a linked PLC master/slave pair (qet-mcp's link_elements),
then drove the real interaction under Xvfb:

  Ctrl+A, Ctrl+C, Ctrl+V:
    originals   95ad58fc <-> e728632c   (unchanged)
    pasted      513e6bf8 <-> 29aa60b4   (linked to each other)

  Right-click folio > "Copier et coller":
    originals   95ad58fc <-> e728632c   (unchanged)
    duplicated  0a33ccb4 <-> 3264fe66   (linked to each other)

Neither copy links back to an original or comes in unlinked. Qt 6.10.2,
ctest 13/13.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 16:37:45 +12:00
ispyisail 032f2249a3 Reject non-finite values in QET::attributeIsAReal()
Reviving the still-relevant third of #682 (closed 2026-09-18 purely to
clear a review backlog, not on merit). Investigated fresh against
current master rather than merged wholesale -- two of the original
PR's three findings turned out to already be resolved independently:

- Element::valideXml() and Terminal::valideXml() already reject a
  non-finite x/y (qIsFinite checks, with comments citing this exact
  class of bug) -- added by someone else since #682 was written.
  Verified live: a project with x="nan" on an element loads and
  exports cleanly on current master, 3.1s, no hang.
- The illegal-XML-control-byte segfault in QDomDocument::setContent()
  does not reproduce either. Tested both bytes from the original
  report (0x00, 0x0E) against a real Qt6 build: both are now refused
  cleanly (XmlParsingFailed, exit 0), no crash. Qt6's QDom parses
  differently to the Qt5 one #682 was written and tested against.

What's still genuinely open: QET::attributeIsAReal() itself --
QString::toDouble()'s output parameter reports success for "nan"/
"inf"/"-inf", and this shared helper (26+ call sites across the
codebase, per #682's own count) had no finiteness check independent of
element.cpp/terminal.cpp's own since-added ones. Confirmed several
call sites are not behind either of those two gates -- notably
elementpicturefactory.cpp's line/rect/ellipse/circle/arc parsing for a
symbol's own drawing (a corrupted .elmt, not just a corrupted project
file), which was and remains reachable through this helper alone.

Qt 6.10.2, ctest 13/13.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 16:25:39 +12:00
ispyisail 1890cee801 Cancel the collection-loading map before waiting on it in ~ElementsCollectionModel
Reviving #713, closed 2026-09-21 purely to clear a maintainer review
backlog (#630), not on merit; not superseded. The crash #713 was
originally named after (bugtracker #291) was already fixed separately
by 39ac5716c, merged 14 Aug -- confirmed still on master. What's left,
and what this revives, is the one-line follow-up #713 itself narrowed
to after that: m_future.cancel() before the wait.

Without it, ~ElementsCollectionModel()'s wait runs the whole queued
QtConcurrent::map() to completion, so cancelling the open-element
dialog blocks until every remaining item has been processed -- a
visible hang on the button pressed precisely to stop the work.
cancel() drops the not-yet-started items so the wait is short, while
still waiting for whatever item is already in flight (needed so it
can't dereference this object after it's gone).

Qt 6.10.2, ctest 13/13. The responsiveness gain itself is reasoned
from QFuture's documented cancel()/waitForFinished() semantics rather
than timed -- same as the original PR's own stated verification.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 16:20:38 +12:00
ispyisail 3eea3059bf Fix element_info orphan row causing UNIQUE constraint errors on undo
Reviving #664, closed 2026-09-18 purely to clear a maintainer review
backlog (#630), not on merit; not superseded. Rewritten fresh against
current master rather than merged from the old branch -- that branch
predates the Qt6-only switch and much of dataBase/projectdatabase.cpp's
later rewrite, and the two had diverged too far for a textual merge to
be trustworthy.

projectDataBase::removeElement() only ran DELETE FROM element WHERE
uuid=:uuid. It never touched element_info, even though every element
also has a row there (element_uuid is its PRIMARY KEY, with a FOREIGN
KEY back to element.uuid that isn't enforced by this connection -- no
ON DELETE CASCADE in effect). So deleting an element left its
element_info row orphaned.

Re-adding an element with that same uuid later -- undo of that same
deletion, or a redo replaying it -- goes through addElement(), which
INSERTs into both tables. The element insert succeeds (that row really
was removed). The element_info insert hits the orphaned row's primary
key and fails, silently: the error is logged and swallowed, so the
element re-enters the scene with no element_info row at all, and
nothing later re-syncs it.

removeDiagram() already cascades this cleanup when a whole folio is
removed (a later, unrelated addition) -- confirmed on current master --
but that path never runs for a single element removed on its own,
which is the case this fixes.

Verified on the built binary, not just read: placed an element, deleted
it (Ctrl+A, Delete), undid the deletion (Ctrl+Z). Reverting just this
fix and repeating the identical sequence reproduces the exact reported
error:

  Debug: projectDataBase::addElement insert element info error :
  QSqlError("1555", "Unable to fetch row",
  "UNIQUE constraint failed: element_info.element_uuid")

With the fix, the same sequence produces nothing. Qt 6.10.2, ctest
13/13.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 16:13:04 +12:00
55 changed files with 124774 additions and 48 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ jobs:
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
ca-certificates build-essential cmake ninja-build git pkg-config \
qt6-base-dev qt6-base-private-dev qt6-tools-dev qt6-tools-dev-tools \
libqt6svg6-dev libqt6sql6-sqlite libcups2-dev \
libqt6svg6-dev libqt6sql6-sqlite libcups2-dev libsqlite3-dev \
libxkbcommon-x11-0 \
xvfb openbox xdotool x11-utils
# extra-cmake-modules and the KF6 libraries are installed rather than
+10 -1
View File
@@ -49,6 +49,7 @@ jobs:
mingw-w64-ucrt-x86_64-qt6-tools
mingw-w64-ucrt-x86_64-qt6-translations
mingw-w64-ucrt-x86_64-qt6-pdf
mingw-w64-ucrt-x86_64-sqlite3
mingw-w64-ucrt-x86_64-pkg-config
mingw-w64-ucrt-x86_64-kwidgetsaddons
mingw-w64-ucrt-x86_64-kcoreaddons
@@ -121,7 +122,8 @@ jobs:
-DQET_EXPORT_PROJECT_DB=ON \
-DCMAKE_C_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
-DSQLite3_INCLUDE_DIR=/ucrt64/include \
-DSQLite3_LIBRARY=/ucrt64/lib/libsqlite3.dll.a \
..
ninja -j"$NPROC"
@@ -194,6 +196,13 @@ jobs:
cp /ucrt64/bin/libgcc_s_seh-1.dll "$BIN/"
cp /ucrt64/bin/libstdc++-6.dll "$BIN/"
cp /ucrt64/bin/libwinpthread-1.dll "$BIN/"
SQLITE=$(find /ucrt64/bin -name "libsqlite3*.dll" | head -1)
if [ -n "$SQLITE" ]; then
cp "$SQLITE" "$BIN/"
echo "SQLite3 copied: $(basename $SQLITE)"
else
echo "WARNING: libsqlite3 not found in /ucrt64/bin/"
fi
cp "$GITHUB_WORKSPACE/build-aux/windows/QET64.nsi" "$NSIS_ROOT/"
cp "$GITHUB_WORKSPACE/build-aux/windows/lang_extra.nsh" "$NSIS_ROOT/"
+21 -7
View File
@@ -27,12 +27,18 @@ git submodule update --init --recursive
| C++17 compiler | required | GCC or Clang on Unix-like platforms; MSVC or MinGW-w64 g++ on Windows — see [Choosing a compiler](#3-choosing-a-compiler-unix) / [Building on Windows](#6-building-on-windows-msvc--mingw) |
| Qt6 base + widgets | required | |
| Qt6 **GuiPrivate** headers | required | needed for clickable PDF hyperlinks; **hard build failure** at CMake generate time if missing, see below |
| SQLite3 | required | used by the nomenclature/summary database |
| Qt Linguist tools (`lrelease`) | required | compiles the tracked `.ts` files into `.qm` as part of every normal build |
| pugixml | handled automatically | fetched and built via CMake FetchContent if not already present on the system — see [pugixml](#8-pugixml) below |
| Qt Test module | required if building tests | `PACKAGE_TESTS` is `ON` by default; QtTest ships as part of the base Qt6 dev packages listed below on every platform, no extra package needed |
| KDE Frameworks (KF6) | optional | see [Building without KDE Frameworks](#9-building-without-kde-frameworks) |
| QtPdf module | optional | see [PDF page import](#7-pdf-page-import-qtpdf) |
A note on CMake versions: the project declares a minimum of 3.5 but is
routinely built with much newer releases; if your CMake is older than 4.3 it
simply won't have the newer `SQLite3::SQLite3` target name, which the build
script compensates for automatically. There is nothing you need to do either
way.
## 3. Building (out-of-source build)
@@ -100,7 +106,7 @@ the closest match.
sudo apt install \
build-essential cmake ninja-build git \
qt6-base-dev qt6-base-private-dev qt6-tools-dev qt6-tools-dev-tools \
libsqlite3-dev \
libkf6coreaddons-dev libkf6widgetsaddons-dev
```
@@ -132,6 +138,7 @@ sudo apt install libpugixml-dev
sudo dnf install \
cmake gcc-c++ git \
qt6-qtbase-devel qt6-qtbase-private-devel qt6-qttools-devel \
sqlite-devel \
kf6-kcoreaddons-devel kf6-kwidgetsaddons-devel
```
@@ -148,10 +155,11 @@ Optional, for a system pugixml: `sudo dnf install pugixml-devel`.
pkg install \
cmake git \
qt6-base qt6-tools \
sqlite3 \
kf6-kcoreaddons kf6-kwidgetsaddons
```
(from ports: `devel/qt6-base`, `devel/qt6-tools`,
(from ports: `devel/qt6-base`, `devel/qt6-tools`, `databases/sqlite3`,
`devel/kf6-kcoreaddons`, `x11-toolkits/kf6-kwidgetsaddons`.) Qt6's
`GuiPrivate` headers ship as part of `qt6-base` on FreeBSD, no separate
package is needed. `QtPdf` is not packaged on FreeBSD at the time of writing
@@ -167,7 +175,7 @@ Optional, for a system pugixml: `pkg install pugixml` (`devel/pugixml`).
Using [Homebrew](https://brew.sh):
```sh
brew install cmake qt ninja
brew install cmake qt sqlite ninja
```
Homebrew's `qt` formula is Qt6 and includes the private headers, so no
@@ -185,7 +193,7 @@ Optional, for a system pugixml: `brew install pugixml`.
See [Building on Windows](#6-building-on-windows-msvc--mingw) below — the
package sources differ enough from the Unix-like platforms above (no system
package manager and Qt aren't provided the same way) that it gets
package manager, SQLite3 and Qt aren't provided the same way) that it gets
its own section.
## 5. pugixml
@@ -207,7 +215,7 @@ on Debian/Ubuntu, `pugixml-devel` on Fedora).
Both toolchains QET's CMake build targets on Windows are covered here:
**MSVC** (Visual Studio 2019/2022) and **MinGW-w64** (gcc). Unlike the
Unix-like platforms above, there's no single system package manager, so
Qt and (optionally) KDE Frameworks each need to be sourced
Qt, SQLite3 and (optionally) KDE Frameworks each need to be sourced
separately per toolchain.
One piece of good news either way: unlike Debian/Fedora, the official Qt
@@ -228,7 +236,11 @@ normally use `-DBUILD_WITH_KF=OFF` (see the
1. Install Visual Studio with the "Desktop development with C++" workload,
and install Qt6 for MSVC (e.g. the `msvc2019_64` or `msvc2022_64` kit)
via the [Qt Online Installer](https://www.qt.io/download-qt-installer).
2. Configure and build from an "x64 Native Tools Command Prompt for VS":
2. Get SQLite3 — the simplest route is [vcpkg](https://vcpkg.io):
```bat
vcpkg install sqlite3:x64-windows
```
3. Configure and build from an "x64 Native Tools Command Prompt for VS":
```bat
mkdir build && cd build
cmake .. -G "Visual Studio 17 2022" -A x64 ^
@@ -281,7 +293,9 @@ Using the Qt Online Installer's bundled MinGW kit instead: point
`CMAKE_PREFIX_PATH` at that kit (e.g. `C:\Qt\6.x.x\mingw_64`) and make sure
its bundled `g++.exe` comes first on `PATH`, or pass
`-DCMAKE_C_COMPILER`/`-DCMAKE_CXX_COMPILER` explicitly so CMake doesn't pick
up a different MinGW installation.
up a different MinGW installation. SQLite3 still has to come from elsewhere
in this path — vcpkg with a `mingw`-flavoured triplet, or MSYS2's package as
above.
## 7. Qt6 private headers (mandatory)
+2 -1
View File
@@ -71,6 +71,7 @@ parts:
source: .
stage-packages:
- git
- sqlite3
- xdg-user-dirs
- libqt6qml6
# libxcb-cursor0 workaround was needed against the Qt5/KF5 core22 content
@@ -81,7 +82,7 @@ parts:
- git
- cmake
- ninja-build
- libsqlite3-dev
- qt6-tools-dev
- qt6-base-private-dev
- qt6-declarative-dev
File diff suppressed because it is too large Load Diff
+222
View File
@@ -0,0 +1,222 @@
<!DOCTYPE QPH>
<QPH sourcelanguage="fr_FR" language="ca">
<phrase>
<source>Réf. croisée</source>
<target>Ref. creuada</target>
</phrase>
<phrase>
<source>armoire</source>
<target>armari</target>
<definition>cabinet / enclosure</definition>
</phrase>
<phrase>
<source>bobine</source>
<target>bobina</target>
<definition>coil</definition>
</phrase>
<phrase>
<source>borne</source>
<target>born</target>
<definition>terminal - a connection point on a symbol</definition>
</phrase>
<phrase>
<source>bornier</source>
<target>bornes</target>
<definition>terminal strip</definition>
</phrase>
<phrase>
<source>cable</source>
<target>cable</target>
<definition>cable</definition>
</phrase>
<phrase>
<source>calibre</source>
<target>calibre</target>
<definition>rating - the current rating of a device</definition>
</phrase>
<phrase>
<source>cartouche</source>
<target>cartutx</target>
<definition>title block - the framed information panel</definition>
</phrase>
<phrase>
<source>champ de texte</source>
<target>camp de text</target>
<definition>text field</definition>
</phrase>
<phrase>
<source>collection</source>
<target>col·lecció</target>
<definition>collection - the symbol library</definition>
</phrase>
<phrase>
<source>conducteur</source>
<target>conductor</target>
<definition>conductor - the drawn wire between terminals</definition>
</phrase>
<phrase>
<source>contact</source>
<target>contacte</target>
<definition>contact</definition>
</phrase>
<phrase>
<source>contacteur</source>
<target>contactor</target>
<definition>contactor</definition>
</phrase>
<phrase>
<source>courant</source>
<target>corrent</target>
<definition>current</definition>
</phrase>
<phrase>
<source>disjoncteur</source>
<target>disjuntor</target>
<definition>circuit breaker</definition>
</phrase>
<phrase>
<source>dossier</source>
<target>carpeta</target>
<definition>folder</definition>
</phrase>
<phrase>
<source>element</source>
<target>element</target>
<definition>element - a symbol placed on a sheet</definition>
</phrase>
<phrase>
<source>esclave</source>
<target>esclau</target>
<definition>slave - the contact block belonging to a master</definition>
</phrase>
<phrase>
<source>fil</source>
<target>fil</target>
<definition>wire</definition>
</phrase>
<phrase>
<source>folio</source>
<target>plec</target>
<definition>sheet - one drawing of a set</definition>
</phrase>
<phrase>
<source>fusible</source>
<target>fusible</target>
<definition>fuse</definition>
</phrase>
<phrase>
<source>grille</source>
<target>graella</target>
<definition>grid</definition>
</phrase>
<phrase>
<source>interrupteur</source>
<target>interruptor</target>
<definition>switch</definition>
</phrase>
<phrase>
<source>maitre</source>
<target>mestre</target>
<definition>master - the element a cross-reference points from</definition>
</phrase>
<phrase>
<source>modele</source>
<target>plantilla</target>
<definition>template</definition>
</phrase>
<phrase>
<source>moteur</source>
<target>motor</target>
<definition>motor</definition>
</phrase>
<phrase>
<source>neutre</source>
<target>neutre</target>
<definition>neutral</definition>
</phrase>
<phrase>
<source>nomenclature</source>
<target>nomenclatura</target>
<definition>parts list / bill of materials</definition>
</phrase>
<phrase>
<source>numerotation</source>
<target>numeració</target>
<definition>numbering - automatic wire and part numbering</definition>
</phrase>
<phrase>
<source>phase</source>
<target>fase</target>
<definition>phase</definition>
</phrase>
<phrase>
<source>potentiel</source>
<target>potencial</target>
<definition>potential - conductors electrically joined as one node</definition>
</phrase>
<phrase>
<source>projet</source>
<target>projecte</target>
<definition>project - the .qet file holding the sheets</definition>
</phrase>
<phrase>
<source>puissance</source>
<target>potència</target>
<definition>power</definition>
</phrase>
<phrase>
<source>relais</source>
<target>relé</target>
<definition>relay</definition>
</phrase>
<phrase>
<source>renvoi de folio</source>
<target>referència de plec</target>
<definition>sheet cross-reference</definition>
</phrase>
<phrase>
<source>repere</source>
<target>referència</target>
<definition>designation - the identifying mark on a part</definition>
</phrase>
<phrase>
<source>report de folio</source>
<target>remissió de plec</target>
<definition>sheet cross-reference (the arrow symbol)</definition>
</phrase>
<phrase>
<source>schema</source>
<target>esquema</target>
<definition>diagram</definition>
</phrase>
<phrase>
<source>section</source>
<target>secció</target>
<definition>cross-section - conductor size in mm2</definition>
</phrase>
<phrase>
<source>sommaire</source>
<target>sumari</target>
<definition>summary / table of contents</definition>
</phrase>
<phrase>
<source>tension</source>
<target>tensió</target>
<definition>voltage</definition>
</phrase>
<phrase>
<source>terre</source>
<target>terra</target>
<definition>earth / ground</definition>
</phrase>
<phrase>
<source>texte</source>
<target>text</target>
<definition>text</definition>
</phrase>
<phrase>
<source>transformateur</source>
<target>transformador</target>
<definition>transformer</definition>
</phrase>
</QPH>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+4
View File
@@ -100,4 +100,8 @@
<source>traduction</source>
<target>Übersetzung</target>
</phrase>
<phrase>
<source>Modifier le nom de la borne</source>
<target>Klemmenname ändern</target>
</phrase>
</QPH>
File diff suppressed because it is too large Load Diff
+918
View File
@@ -0,0 +1,918 @@
<!DOCTYPE QPH>
<QPH sourcelanguage="fr_FR" language="en">
<phrase>
<source>Blue : Blue</source>
<target>Blue : Blue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : CornflowerBlue</source>
<target>Blue : CornflowerBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : DarkBlue</source>
<target>Blue : DarkBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : DeepSkyBlue</source>
<target>Blue : DeepSkyBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : DodgerBlue</source>
<target>Blue : DodgerBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : LightBlue</source>
<target>Blue : LightBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : LightSkyBlue</source>
<target>Blue : LightSkyBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : LightSteelBlue</source>
<target>Blue : LightSteelBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : MediumBlue</source>
<target>Blue : MediumBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : MidnightBlue</source>
<target>Blue : MidnightBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : Navy</source>
<target>Blue : Navy</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : PowderBlue</source>
<target>Blue : PowderBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : RoyalBlue</source>
<target>Blue : RoyalBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : SkyBlue</source>
<target>Blue : SkyBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Blue : SteelBlue</source>
<target>Blue : SteelBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : Bisque</source>
<target>Brown : Bisque</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : BlanchedAlmond</source>
<target>Brown : BlanchedAlmond</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : Brown</source>
<target>Brown : Brown</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : Burlywood</source>
<target>Brown : Burlywood</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : Chocolate</source>
<target>Brown : Chocolate</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : Cornsilk</source>
<target>Brown : Cornsilk</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : DarkGoldenrod</source>
<target>Brown : DarkGoldenrod</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : Goldenrod</source>
<target>Brown : Goldenrod</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : Maroon</source>
<target>Brown : Maroon</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : NavajoWhite</source>
<target>Brown : NavajoWhite</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : Peru</source>
<target>Brown : Peru</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : RosyBrown</source>
<target>Brown : RosyBrown</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : SaddleBrown</source>
<target>Brown : SaddleBrown</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : SandyBrown</source>
<target>Brown : SandyBrown</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : Sienna</source>
<target>Brown : Sienna</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : Tan</source>
<target>Brown : Tan</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Brown : Wheat</source>
<target>Brown : Wheat</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Cyan : Aqua</source>
<target>Cyan : Aqua</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Cyan : Aquamarine</source>
<target>Cyan : Aquamarine</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Cyan : CadetBlue</source>
<target>Cyan : CadetBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Cyan : Cyan</source>
<target>Cyan : Cyan</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Cyan : DarkCyan</source>
<target>Cyan : DarkCyan</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Cyan : DarkTurquoise</source>
<target>Cyan : DarkTurquoise</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Cyan : LightCyan</source>
<target>Cyan : LightCyan</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Cyan : LightSeaGreen</source>
<target>Cyan : LightSeaGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Cyan : MediumTurquoise</source>
<target>Cyan : MediumTurquoise</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Cyan : PaleTurquoise</source>
<target>Cyan : PaleTurquoise</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Cyan : Teal</source>
<target>Cyan : Teal</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Cyan : Turquoise</source>
<target>Cyan : Turquoise</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Gray : Black</source>
<target>Gray : Black</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Gray : DarkGray</source>
<target>Gray : DarkGray</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Gray : DarkSlateGray</source>
<target>Gray : DarkSlateGray</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Gray : DimGray</source>
<target>Gray : DimGray</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Gray : Gainsboro</source>
<target>Gray : Gainsboro</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Gray : Gray</source>
<target>Gray : Gray</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Gray : LightGray</source>
<target>Gray : LightGray</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Gray : LightSlateGray</source>
<target>Gray : LightSlateGray</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Gray : Silver</source>
<target>Gray : Silver</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Gray : SlateGray</source>
<target>Gray : SlateGray</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : Chartreuse</source>
<target>Green : Chartreuse</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : DarkGreen</source>
<target>Green : DarkGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : DarkOliveGreen</source>
<target>Green : DarkOliveGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : DarkSeaGreen</source>
<target>Green : DarkSeaGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : ForestGreen</source>
<target>Green : ForestGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : Green</source>
<target>Green : Green</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : GreenYellow</source>
<target>Green : GreenYellow</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : LawnGreen</source>
<target>Green : LawnGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : LightGreen</source>
<target>Green : LightGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : Lime</source>
<target>Green : Lime</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : LimeGreen</source>
<target>Green : LimeGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : MediumAquamarine</source>
<target>Green : MediumAquamarine</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : MediumSeaGreen</source>
<target>Green : MediumSeaGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : MediumSpringGreen</source>
<target>Green : MediumSpringGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : Olive</source>
<target>Green : Olive</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : OliveDrab</source>
<target>Green : OliveDrab</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : PaleGreen</source>
<target>Green : PaleGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : SeaGreen</source>
<target>Green : SeaGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : SpringGreen</source>
<target>Green : SpringGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Green : YellowGreen</source>
<target>Green : YellowGreen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Orange : Coral</source>
<target>Orange : Coral</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Orange : DarkOrange</source>
<target>Orange : DarkOrange</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Orange : Orange</source>
<target>Orange : Orange</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Orange : OrangeRed</source>
<target>Orange : OrangeRed</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Orange : Tomato</source>
<target>Orange : Tomato</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Pink : DeepPink</source>
<target>Pink: DeepPink</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Pink : HotPink</source>
<target>Pink: HotPink</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Pink : LightPink</source>
<target>Pink: LightPink</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Pink : MediumVioletRed</source>
<target>Pink: MediumVioletRed</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Pink : PaleVioletRed</source>
<target>Pink: PaleVioletRed</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Pink : Pink</source>
<target>Pink: Pink</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : BlueViolet</source>
<target>Purple : BlueViolet</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : DarkMagenta</source>
<target>Purple : DarkMagenta</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : DarkOrchid</source>
<target>Purple : DarkOrchid</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : DarkSlateBlue</source>
<target>Purple : DarkSlateBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : DarkViolet</source>
<target>Purple : DarkViolet</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : Fuchsia</source>
<target>Purple : Fuchsia</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : Indigo</source>
<target>Purple : Indigo</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : Lavender</source>
<target>Purple : Lavender</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : Magenta</source>
<target>Purple : Magenta</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : MediumOrchid</source>
<target>Purple : MediumOrchid</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : MediumPurple</source>
<target>Purple : MediumPurple</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : MediumSlateBlue</source>
<target>Purple : MediumSlateBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : Orchid</source>
<target>Purple : Orchid</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : Plum</source>
<target>Purple : Plum</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : Purple</source>
<target>Purple : Purple</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : SlateBlue</source>
<target>Purple : SlateBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : Thistle</source>
<target>Purple : Thistle</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Purple : Violet</source>
<target>Purple : Violet</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Red : Crimson</source>
<target>Red : Crimson</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Red : DarkRed</source>
<target>Red : DarkRed</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Red : DarkSalmon</source>
<target>Red: DarkSalmon</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Red : Firebrick</source>
<target>Red : Firebrick</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Red : IndianRed</source>
<target>Red: IndianRed</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Red : LightCoral</source>
<target>Red: LightCoral</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Red : LightSalmon</source>
<target>Red: LightSalmon</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Red : Red</source>
<target>Red : Red</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Red : Salmon</source>
<target>Red: Salmon</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : AliceBlue</source>
<target>White : AliceBlue</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : AntiqueWhite</source>
<target>White : AntiqueWhite</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : Azure</source>
<target>White : Azure</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : Beige</source>
<target>White : Beige</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : FloralWhite</source>
<target>White : FloralWhite</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : GhostWhite</source>
<target>White : GhostWhite</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : Honeydew</source>
<target>White : Honeydew</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : Ivory</source>
<target>White : Ivory</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : LavenderBlush</source>
<target>White : LavenderBlush</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : Linen</source>
<target>White : Linen</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : MintCream</source>
<target>White : MintCream</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : MistyRose</source>
<target>White : MistyRose</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : OldLace</source>
<target>White : OldLace</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : Seashell</source>
<target>White : Seashell</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : Snow</source>
<target>White : Snow</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : White</source>
<target>White : White</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>White : WhiteSmoke</source>
<target>White : WhiteSmoke</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Yellow : DarkKhaki</source>
<target>Yellow : DarkKhaki</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Yellow : Gold</source>
<target>Yellow : Gold</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Yellow : Khaki</source>
<target>Yellow : Khaki</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Yellow : LemonChiffon</source>
<target>Yellow : LemonChiffon</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Yellow : LightGoldenrodYellow</source>
<target>Yellow : LightGoldenrodYellow</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Yellow : LightYellow</source>
<target>Yellow : LightYellow</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Yellow : Moccasin</source>
<target>Yellow : Moccasin</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Yellow : PaleGoldenrod</source>
<target>Yellow : PaleGoldenrod</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Yellow : PapayaWhip</source>
<target>Yellow : PapayaWhip</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Yellow : PeachPuff</source>
<target>Yellow : PeachPuff</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>Yellow : Yellow</source>
<target>Yellow : Yellow</target>
<definition>element part filling</definition>
</phrase>
<phrase>
<source>armoire</source>
<target>cabinet</target>
<definition>cabinet / enclosure</definition>
</phrase>
<phrase>
<source>bobine</source>
<target>coil</target>
<definition>coil</definition>
</phrase>
<phrase>
<source>borne</source>
<target>terminal</target>
<definition>terminal - a connection point on a symbol</definition>
</phrase>
<phrase>
<source>bornier</source>
<target>terminal strip</target>
<definition>terminal strip</definition>
</phrase>
<phrase>
<source>cable</source>
<target>cable</target>
<definition>cable</definition>
</phrase>
<phrase>
<source>calibre</source>
<target>rating</target>
<definition>rating - the current rating of a device</definition>
</phrase>
<phrase>
<source>cartouche</source>
<target>title block</target>
<definition>title block - the framed information panel</definition>
</phrase>
<phrase>
<source>champ de texte</source>
<target>text field</target>
<definition>text field</definition>
</phrase>
<phrase>
<source>collection</source>
<target>collection</target>
<definition>collection - the symbol library</definition>
</phrase>
<phrase>
<source>conducteur</source>
<target>conductor</target>
<definition>conductor - the drawn wire between terminals</definition>
</phrase>
<phrase>
<source>contact</source>
<target>contact</target>
<definition>contact</definition>
</phrase>
<phrase>
<source>contacteur</source>
<target>contactor</target>
<definition>contactor</definition>
</phrase>
<phrase>
<source>courant</source>
<target>current</target>
<definition>current</definition>
</phrase>
<phrase>
<source>disjoncteur</source>
<target>circuit breaker</target>
<definition>circuit breaker</definition>
</phrase>
<phrase>
<source>dossier</source>
<target>folder</target>
<definition>folder</definition>
</phrase>
<phrase>
<source>element</source>
<target>element</target>
<definition>element - a symbol placed on a sheet</definition>
</phrase>
<phrase>
<source>esclave</source>
<target>slave</target>
<definition>slave - the contact block belonging to a master</definition>
</phrase>
<phrase>
<source>fil</source>
<target>wire</target>
<definition>wire</definition>
</phrase>
<phrase>
<source>folio</source>
<target>sheet</target>
<definition>sheet - one drawing of a set</definition>
</phrase>
<phrase>
<source>fusible</source>
<target>fuse</target>
<definition>fuse</definition>
</phrase>
<phrase>
<source>grille</source>
<target>grid</target>
<definition>grid</definition>
</phrase>
<phrase>
<source>interrupteur</source>
<target>switch</target>
<definition>switch</definition>
</phrase>
<phrase>
<source>maitre</source>
<target>master</target>
<definition>master - the element a cross-reference points from</definition>
</phrase>
<phrase>
<source>modele</source>
<target>template</target>
<definition>template</definition>
</phrase>
<phrase>
<source>moteur</source>
<target>motor</target>
<definition>motor</definition>
</phrase>
<phrase>
<source>neutre</source>
<target>neutral</target>
<definition>neutral</definition>
</phrase>
<phrase>
<source>nomenclature</source>
<target>parts list</target>
<definition>parts list / bill of materials</definition>
</phrase>
<phrase>
<source>numerotation</source>
<target>numbering</target>
<definition>numbering - automatic wire and part numbering</definition>
</phrase>
<phrase>
<source>phase</source>
<target>phase</target>
<definition>phase</definition>
</phrase>
<phrase>
<source>potentiel</source>
<target>potential</target>
<definition>potential - conductors electrically joined as one node</definition>
</phrase>
<phrase>
<source>projet</source>
<target>project</target>
<definition>project - the .qet file holding the sheets</definition>
</phrase>
<phrase>
<source>puissance</source>
<target>power</target>
<definition>power</definition>
</phrase>
<phrase>
<source>relais</source>
<target>relay</target>
<definition>relay</definition>
</phrase>
<phrase>
<source>renvoi de folio</source>
<target>sheet cross-reference</target>
<definition>sheet cross-reference</definition>
</phrase>
<phrase>
<source>repere</source>
<target>designation</target>
<definition>designation - the identifying mark on a part</definition>
</phrase>
<phrase>
<source>report de folio</source>
<target>sheet cross-reference</target>
<definition>sheet cross-reference (the arrow symbol)</definition>
</phrase>
<phrase>
<source>schema</source>
<target>diagram</target>
<definition>diagram</definition>
</phrase>
<phrase>
<source>section</source>
<target>cross-section</target>
<definition>cross-section - conductor size in mm2</definition>
</phrase>
<phrase>
<source>sommaire</source>
<target>summary</target>
<definition>summary / table of contents</definition>
</phrase>
<phrase>
<source>tension</source>
<target>voltage</target>
<definition>voltage</definition>
</phrase>
<phrase>
<source>terre</source>
<target>earth</target>
<definition>earth / ground</definition>
</phrase>
<phrase>
<source>texte</source>
<target>text</target>
<definition>text</definition>
</phrase>
<phrase>
<source>transformateur</source>
<target>transformer</target>
<definition>transformer</definition>
</phrase>
</QPH>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+941
View File
@@ -0,0 +1,941 @@
<!DOCTYPE QPH>
<QPH sourcelanguage="fr_FR" language="nl_BE">
<phrase>
<source> Contacts : NO : %1, NC : %2, inverseurs : %3, autres : %4
</source>
<target>Contacten: NO: %1, NC: %2, wisselcontacten: %3, andere: %4
</target>
</phrase>
<phrase>
<source> Contacts : NO : %1/%2, NC : %3/%4, inverseurs : %5/%6, autres : %7/%8
</source>
<target>Contacten: NO: %1/%2, NC: %3/%4, wisselcontacten: %5/%6, andere: %7/%8
</target>
</phrase>
<phrase>
<source> %</source>
<target>%</target>
</phrase>
<phrase>
<source> (Ctrl pendant le glissement = position libre, sans accrochage à la grille)</source>
<target>(Ctrl tijdens het slepen = vrije positie, zonder vastklikken aan het raster)</target>
</phrase>
<phrase>
<source> -- %1 : mode %2</source>
<target>-- %1 : modus %2</target>
</phrase>
<phrase>
<source> ; point rouge : glisser pour repositionner le centre de rotation</source>
<target>; rood punt: slepen om het draaipunt te verplaatsen</target>
</phrase>
<phrase>
<source> ; point turquoise : arc</source>
<target>; turquoise punt: boog</target>
</phrase>
<phrase>
<source> ; un bord : inclinaison</source>
<target>; een rand: kanteling</target>
</phrase>
<phrase>
<source> °</source>
<target>°</target>
</phrase>
<phrase>
<source> — Cliquer : mode %1</source>
<target>— Klikken: modus %1</target>
</phrase>
<phrase>
<source>, Alt = créer des poignées</source>
<target>, Alt = handgrepen creëren</target>
</phrase>
<phrase>
<source>, Alt = détacher en polyligne</source>
<target>, Alt = losmaken als polylijn</target>
</phrase>
<phrase>
<source>Ajoute une courbe de Bézier sur le folio actuel</source>
<target>Voegt een Béziercurve toe op het huidige blad</target>
</phrase>
<phrase>
<source>Ajouter la borne %1</source>
<target>Klem %1 toevoegen</target>
</phrase>
<phrase>
<source>Ajouter un point à une courbe</source>
<target>Een punt aan een curve toevoegen</target>
</phrase>
<phrase>
<source>Ajouter une courbe</source>
<target>Een curve toevoegen</target>
</phrase>
<phrase>
<source>Angle</source>
<target>Hoek</target>
</phrase>
<phrase>
<source>Anguleux</source>
<target>Hoekig</target>
</phrase>
<phrase>
<source>Aperçu</source>
<target>Voorbeeld</target>
</phrase>
<phrase>
<source>Arrondir les coins d&apos;%1</source>
<target>Hoeken van %1 afronden</target>
</phrase>
<phrase>
<source>Borne 1</source>
<target>Klem 1</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Borne 2</source>
<target>Klem 2</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Catégorie</source>
<target>Categorie</target>
</phrase>
<phrase>
<source>Ce format ne prend pas en charge la transparence : l&apos;image sera enregistrée telle qu&apos;elle était avant l&apos;application de la couleur transparente. Continuer ?</source>
<target>Dit formaat ondersteunt geen transparantie: de afbeelding wordt opgeslagen zoals ze was vóór het toepassen van de transparante kleur. Doorgaan?</target>
</phrase>
<phrase>
<source>Champ de texte</source>
<target>Tekstveld</target>
</phrase>
<phrase>
<source>Clic : positionner à la taille d&apos;origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille.</source>
<target>Klik: op oorspronkelijke grootte plaatsen. Klikken en slepen: plaatsen en formaat wijzigen. Rechtsklik: 90° draaien. Ctrl+muiswiel: formaat aanpassen.</target>
</phrase>
<phrase>
<source>Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point</source>
<target>Linkerklik: volgend punt; dubbelklik of Enter: beëindigen; rechtsklik: laatste punt annuleren</target>
</phrase>
<phrase>
<source>Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler</source>
<target>Linkerklik: tegenoverliggende hoek plaatsen (Shift = vierkant, Ctrl = vanuit het midden + vrije positie, Ctrl+Shift = gecentreerd vierkant); rechtsklik: annuleren</target>
</phrase>
<phrase>
<source>Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler</source>
<target>Linkerklik: tegenoverliggende hoek plaatsen (Shift = cirkel, Ctrl = vanuit het midden + vrije positie, Ctrl+Shift = gecentreerde cirkel); rechtsklik: annuleren</target>
</phrase>
<phrase>
<source>Clic gauche : positionner le point de départ (Ctrl = position libre)</source>
<target>Linkerklik: startpunt plaatsen (Ctrl = vrije positie)</target>
</phrase>
<phrase>
<source>Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler</source>
<target>Linkerklik: eindpunt plaatsen (Ctrl = vrije positie); rechtsklik: annuleren</target>
</phrase>
<phrase>
<source>Clic gauche : positionner le premier coin (Ctrl = point central, position libre)</source>
<target>Linkerklik: eerste hoek plaatsen (Ctrl = middelpunt, vrije positie)</target>
</phrase>
<phrase>
<source>Clic gauche : positionner le premier point (Ctrl = position libre)</source>
<target>Linkerklik: eerste punt plaatsen (Ctrl = vrije positie)</target>
</phrase>
<phrase>
<source>Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point.</source>
<target>Klik: hoekpunt. Klikken en slepen: curvepunt. Klik op het eerste punt: sluiten. Esc/Enter: beëindigen. Rechtsklik: laatste punt annuleren.</target>
</phrase>
<phrase>
<source>Cliquer</source>
<target>Klikken</target>
</phrase>
<phrase>
<source>Cliquer : mode %1</source>
<target>Klikken: modus %1</target>
</phrase>
<phrase>
<source>Cliquez pour choisir une couleur</source>
<target>Klik om een kleur te kiezen</target>
</phrase>
<phrase>
<source>Cliquez sur l&apos;image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer.</source>
<target>Klik op de afbeelding om een kleur toe te voegen. Pas de tolerantie van elke kleur aan met de schuifregelaar, of klik op × om ze te verwijderen.</target>
</phrase>
<phrase>
<source>Cliquez sur l&apos;image pour choisir une couleur</source>
<target>Klik op de afbeelding om een kleur te kiezen</target>
</phrase>
<phrase>
<source>Coins arrondis</source>
<target>Afgeronde hoeken</target>
</phrase>
<phrase>
<source>Composant 1</source>
<target>Component 1</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Composant 2</source>
<target>Component 2</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Convertir %1 en courbe de Bézier</source>
<target>%1 omzetten naar Béziercurve</target>
</phrase>
<phrase>
<source>Convertir %1 en polyligne</source>
<target>%1 omzetten naar polylijn</target>
</phrase>
<phrase>
<source>Convertir en courbe de Bézier</source>
<target>Omzetten naar Béziercurve</target>
</phrase>
<phrase>
<source>Convertir en polyligne</source>
<target>Omzetten naar polylijn</target>
</phrase>
<phrase>
<source>Couleur transparente</source>
<target>Transparante kleur</target>
</phrase>
<phrase>
<source>Couleur transparente...</source>
<target>Transparante kleur...</target>
</phrase>
<phrase>
<source>Courant nominal</source>
<target>Nominale stroom</target>
</phrase>
<phrase>
<source>Deplacer le centre de rotation</source>
<target>Draaipunt verplaatsen</target>
</phrase>
<phrase>
<source>Description</source>
<target>Beschrijving</target>
</phrase>
<phrase>
<source>Distance in pixels between the label and the slave cross reference</source>
<target>Afstand in pixels tussen het label en de slave-kruisverwijzing</target>
</phrase>
<phrase>
<source>Distance label - slave :</source>
<target>Afstand label - slave:</target>
</phrase>
<phrase>
<source>Définir une couleur transparente</source>
<target>Een transparante kleur instellen</target>
</phrase>
<phrase>
<source>Déformer une courbe</source>
<target>Een curve vervormen</target>
</phrase>
<phrase>
<source>Déplacer le centre de rotation d&apos;une image</source>
<target>Het draaipunt van een afbeelding verplaatsen</target>
</phrase>
<phrase>
<source>Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller.</source>
<target>Ontgrendeld: breedte en hoogte kunnen onafhankelijk worden gewijzigd. Klik om te vergrendelen.</target>
</phrase>
<phrase>
<source>Enregistrer l&apos;image d&apos;origine sous...</source>
<target>Oorspronkelijke afbeelding opslaan als...</target>
</phrase>
<phrase>
<source>Enregistrer l&apos;image sous...</source>
<target>Afbeelding opslaan als...</target>
</phrase>
<phrase>
<source>Erreur</source>
<target>Fout</target>
</phrase>
<phrase>
<source>Exclure de la nomenclature</source>
<target>Uitsluiten van de stuklijst</target>
</phrase>
<phrase>
<source>Faire pivoter %1</source>
<target>%1 roteren</target>
</phrase>
<phrase>
<source>Faire pivoter une image</source>
<target>Een afbeelding draaien</target>
</phrase>
<phrase>
<source>Faites glisser les poignées, ou l&apos;intérieur du cadre, pour ajuster la zone à conserver.</source>
<target>Sleep de handgrepen, of het binnenste van het kader, om het te behouden gebied aan te passen.</target>
</phrase>
<phrase>
<source>Fil</source>
<target>Draad</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Folio</source>
<target>Blad</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Forme fermée</source>
<target>Gesloten vorm</target>
</phrase>
<phrase>
<source>Glisser %1 : rotation (Maj = 15°)</source>
<target>Sleep %1: rotatie (Shift = 15°)</target>
</phrase>
<phrase>
<source>Glisser : ajuster l&apos;arc (Ctrl = position libre, Maj = 15°)</source>
<target>Slepen: de boog aanpassen (Ctrl = vrije positie, Shift = 15°)</target>
</phrase>
<phrase>
<source>Glisser : arrondir les coins (Ctrl = position libre)</source>
<target>Slepen: hoeken afronden (Ctrl = vrije positie)</target>
</phrase>
<phrase>
<source>Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente)</source>
<target>Slepen: de curve vervormen (Ctrl = vrije positie, Alt = de raaklijn breken)</target>
</phrase>
<phrase>
<source>Glisser : déplacer ce point</source>
<target>Slepen: dit punt verplaatsen</target>
</phrase>
<phrase>
<source>Glisser : déplacer le centre de rotation</source>
<target>Slepen: draaipunt verplaatsen</target>
</phrase>
<phrase>
<source>Glisser : déplacer le point (Ctrl = position libre</source>
<target>Slepen: het punt verplaatsen (Ctrl = vrije positie</target>
</phrase>
<phrase>
<source>Glisser : inclinaison (Ctrl = position libre, Maj = 15°)</source>
<target>Slepen: kanteling (Ctrl = vrije positie, Shift = 15°)</target>
</phrase>
<phrase>
<source>Glisser : incliner (Maj = par pas de 15°)</source>
<target>Slepen: kantelen (Shift = stappen van 15°)</target>
</phrase>
<phrase>
<source>Glisser : pivoter (Maj = par pas de 15°)</source>
<target>Slepen: draaien (Shift = stappen van 15°)</target>
</phrase>
<phrase>
<source>Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions</source>
<target>Slepen: formaat wijzigen (Ctrl = vanuit het midden + vrije positie, Shift = verhoudingen</target>
</phrase>
<phrase>
<source>Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre)</source>
<target>Slepen: formaat wijzigen (Shift = verhoudingen behouden, Ctrl = vanuit het midden)</target>
</phrase>
<phrase>
<source>Glisser : repositionner le centre de rotation (Ctrl = position libre)</source>
<target>Slepen: het draaipunt verplaatsen (Ctrl = vrije positie)</target>
</phrase>
<phrase>
<source>Glisser : rotation (Ctrl = position libre, Maj = 15°)</source>
<target>Slepen: rotatie (Ctrl = vrije positie, Shift = 15°)</target>
</phrase>
<phrase>
<source>Glisser le point violet : arrondir les coins</source>
<target>Sleep het paarse punt: hoeken afronden</target>
</phrase>
<phrase>
<source>Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation</source>
<target>Sleep een hoek: draaien (Shift = stappen van 15°); sleep een rand: kantelen (Shift = stappen van 15°); rood punt: draaipunt verplaatsen</target>
</phrase>
<phrase>
<source>Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions)</source>
<target>Sleep een hoek/rand: formaat wijzigen (Ctrl = vanuit het midden, Shift = verhoudingen behouden)</target>
</phrase>
<phrase>
<source>Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne)</source>
<target>Sleep een hoek/rand: formaat wijzigen (Ctrl = vanuit het midden, Shift = verhoudingen, Alt = losmaken als polylijn)</target>
</phrase>
<phrase>
<source>Glisser un point : le déplacer</source>
<target>Sleep een punt: het verplaatsen</target>
</phrase>
<phrase>
<source>Glisser une extrémité : la déplacer</source>
<target>Sleep een uiteinde: het verplaatsen</target>
</phrase>
<phrase>
<source>Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche</source>
<target>Sleep een handgreep of de curve: vervormen (Alt = de raaklijn breken); Alt+sleep een hoekpunt: handgrepen creëren; rechtsklik: menu van het dichtstbijzijnde knooppunt</target>
</phrase>
<phrase>
<source>Géométrie</source>
<target>Geometrie</target>
</phrase>
<phrase>
<source>Hauteur</source>
<target>Hoogte</target>
</phrase>
<phrase>
<source>Image BMP (*.bmp)</source>
<target>BMP-afbeelding (*.bmp)</target>
</phrase>
<phrase>
<source>Image Files (*.png *.jpg *.jpeg *.bmp *.svg)</source>
<target>Afbeeldingsbestanden (*.png *.jpg *.jpeg *.bmp *.svg)</target>
</phrase>
<phrase>
<source>Image JPEG (*.jpg *.jpeg)</source>
<target>JPEG-afbeelding (*.jpg *.jpeg)</target>
</phrase>
<phrase>
<source>Image PNG (*.png)</source>
<target>PNG-afbeelding (*.png)</target>
</phrase>
<phrase>
<source>Image source</source>
<target>Bronafbeelding</target>
</phrase>
<phrase>
<source>Image SVG (*.svg)</source>
<target>SVG-afbeelding (*.svg)</target>
</phrase>
<phrase>
<source>Images non incluses dans l&apos;export DXF</source>
<target>Afbeeldingen niet inbegrepen in de DXF-export</target>
<definition>message box title</definition>
</phrase>
<phrase>
<source>Impossible d&apos;enregistrer l&apos;image à cet emplacement.</source>
<target>Kan de afbeelding niet op die locatie opslaan.</target>
</phrase>
<phrase>
<source>Impossible d&apos;enregistrer la nomenclature dans %1.
%2</source>
<target>Kan de stuklijst niet opslaan in %1.
%2</target>
</phrase>
<phrase>
<source>Impossible de charger l&apos;image.</source>
<target>Kan de afbeelding niet laden.</target>
</phrase>
<phrase>
<source>Inclinaison X</source>
<target>Kanteling X</target>
</phrase>
<phrase>
<source>Inclinaison Y</source>
<target>Kanteling Y</target>
</phrase>
<phrase>
<source>Incliner %1</source>
<target>%1 kantelen</target>
</phrase>
<phrase>
<source>Incliner une image</source>
<target>Een afbeelding kantelen</target>
</phrase>
<phrase>
<source>La limite fixée pour cet élément maître est atteinte (Limite: %1).
Voulez-vous tout de même lier ce contact esclave ?</source>
<target>De limiet voor dit hoofdelement is bereikt (Limiet: %1).
Wilt u dit hulpcontact toch koppelen?</target>
</phrase>
<phrase>
<source>Largeur</source>
<target>Breedte</target>
</phrase>
<phrase>
<source>Le format DXF utilisé ici (AC1006) ne permet pas d&apos;inclure d&apos;image. Les images seront représentées uniquement par un rectangle de contour (position, taille, rotation et inclinaison conservées), sans le contenu de l&apos;image.</source>
<target>Het hier gebruikte DXF-formaat (AC1006) laat niet toe afbeeldingen op te nemen. Afbeeldingen worden enkel voorgesteld door een omtrekrechthoek (positie, grootte, rotatie en kanteling behouden), zonder de inhoud van de afbeelding.</target>
<definition>message box content</definition>
</phrase>
<phrase>
<source>Lisse</source>
<target>Vloeiend</target>
</phrase>
<phrase>
<source>Liste de câblage</source>
<target>Bekabelingslijst</target>
<definition>window title</definition>
</phrase>
<phrase>
<source>Liste de câblage (base de données)</source>
<target>Bekabelingslijst (database)</target>
</phrase>
<phrase>
<source>Localisation :</source>
<target>Locatie:</target>
</phrase>
<phrase>
<source>Longueur</source>
<target>Lengte</target>
</phrase>
<phrase>
<source>margin: 5px; font-weight: bold;</source>
<target>margin: 5px; font-weight: bold;</target>
</phrase>
<phrase>
<source>max:</source>
<target>max:</target>
</phrase>
<phrase>
<source>min:</source>
<target>min:</target>
</phrase>
<phrase>
<source>Miroir horizontal</source>
<target>Horizontaal spiegelen</target>
</phrase>
<phrase>
<source>Miroir horizontal d&apos;une image</source>
<target>Horizontaal spiegelen van een afbeelding</target>
</phrase>
<phrase>
<source>Miroir horizontal de %1</source>
<target>Horizontaal spiegelen van %1</target>
</phrase>
<phrase>
<source>Miroir impossible : inclinaison trop extrême pour cette forme</source>
<target>Spiegelen onmogelijk: kanteling te extreem voor deze vorm</target>
</phrase>
<phrase>
<source>Miroir vertical</source>
<target>Verticaal spiegelen</target>
</phrase>
<phrase>
<source>Miroir vertical d&apos;une image</source>
<target>Verticaal spiegelen van een afbeelding</target>
</phrase>
<phrase>
<source>Miroir vertical de %1</source>
<target>Verticaal spiegelen van %1</target>
</phrase>
<phrase>
<source>Modifier l&apos;angle d&apos;un arc</source>
<target>Hoek van een boog wijzigen</target>
</phrase>
<phrase>
<source>Modifier l&apos;angle d&apos;une forme</source>
<target>Hoek van een vorm wijzigen</target>
</phrase>
<phrase>
<source>Modifier l&apos;angle d&apos;une image</source>
<target>De hoek van een afbeelding wijzigen</target>
</phrase>
<phrase>
<source>Modifier l&apos;inclinaison d&apos;une image</source>
<target>De kanteling van een afbeelding wijzigen</target>
</phrase>
<phrase>
<source>Modifier la courbure d&apos;%1</source>
<target>Kromming van %1 wijzigen</target>
</phrase>
<phrase>
<source>Modifier la forme d&apos;%1</source>
<target>Vorm van %1 wijzigen</target>
</phrase>
<phrase>
<source>Modifier la hauteur d&apos;une image</source>
<target>De hoogte van een afbeelding wijzigen</target>
</phrase>
<phrase>
<source>Modifier la largeur d&apos;une image</source>
<target>De breedte van een afbeelding wijzigen</target>
</phrase>
<phrase>
<source>Modifier la longueur d&apos;une ligne</source>
<target>Lengte van een lijn wijzigen</target>
</phrase>
<phrase>
<source>Modifier la taille d&apos;une forme</source>
<target>Grootte van een vorm wijzigen</target>
</phrase>
<phrase>
<source>Modifier le type d&apos;un nœud</source>
<target>Het type van een knooppunt wijzigen</target>
</phrase>
<phrase>
<source>Modifier une image</source>
<target>Een afbeelding wijzigen</target>
</phrase>
<phrase>
<source>Modèle</source>
<target>Model</target>
</phrase>
<phrase>
<source>Nombre maximum de contacts esclaves définis : non défini
</source>
<target>Maximumaantal gedefinieerde hulpcontacten: niet gedefinieerd
</target>
</phrase>
<phrase>
<source>Notes</source>
<target>Notities</target>
</phrase>
<phrase>
<source>Nœud le plus proche</source>
<target>Dichtstbijzijnde knooppunt</target>
</phrase>
<phrase>
<source>pivoter/incliner</source>
<target>draaien/kantelen</target>
</phrase>
<phrase>
<source>Ponter des bornes entre-elles</source>
<target>Klemmen onderling doorverbinden</target>
</phrase>
<phrase>
<source>Rayon X</source>
<target>Straal X</target>
</phrase>
<phrase>
<source>Rayon Y</source>
<target>Straal Y</target>
</phrase>
<phrase>
<source>redimensionner</source>
<target>formaat wijzigen</target>
</phrase>
<phrase>
<source>Redimensionner %1</source>
<target>%1 vergroten/verkleinen</target>
</phrase>
<phrase>
<source>Redimensionner une image</source>
<target>Formaat van een afbeelding wijzigen</target>
</phrase>
<phrase>
<source>Remplacer l&apos;image...</source>
<target>Afbeelding vervangen...</target>
</phrase>
<phrase>
<source>Remplacer une image</source>
<target>Een afbeelding vervangen</target>
</phrase>
<phrase>
<source>Restaurer les proportions</source>
<target>Verhoudingen herstellen</target>
</phrase>
<phrase>
<source>Restaurer les proportions d&apos;une image</source>
<target>De verhoudingen van een afbeelding herstellen</target>
</phrase>
<phrase>
<source>Retirer cette couleur</source>
<target>Deze kleur verwijderen</target>
</phrase>
<phrase>
<source>Revenir à l&apos;image complète, sans rognage</source>
<target>Terug naar de volledige afbeelding, zonder bijsnijden</target>
</phrase>
<phrase>
<source>rgb(%1, %2, %3)</source>
<target>rgb(%1, %2, %3)</target>
</phrase>
<phrase>
<source>Rogner l&apos;image</source>
<target>Afbeelding bijsnijden</target>
</phrase>
<phrase>
<source>Rogner une image</source>
<target>Een afbeelding bijsnijden</target>
</phrase>
<phrase>
<source>Rogner...</source>
<target>Bijsnijden...</target>
</phrase>
<phrase>
<source>Rotation/Inclinaison</source>
<target>Rotatie/kanteling</target>
</phrase>
<phrase>
<source>Réinitialiser</source>
<target>Herinitialiseren</target>
</phrase>
<phrase>
<source>Selectionner une image...</source>
<target>Een afbeelding selecteren...</target>
</phrase>
<phrase>
<source>Supprimer le nœud le plus proche</source>
<target>Het dichtstbijzijnde knooppunt verwijderen</target>
</phrase>
<phrase>
<source>Supprimer un point d&apos;une courbe</source>
<target>Een punt van een curve verwijderen</target>
</phrase>
<phrase>
<source>Symétrique</source>
<target>Symmetrisch</target>
</phrase>
<phrase>
<source>Séparation de potentiel</source>
<target>Potentiaalscheiding</target>
</phrase>
<phrase>
<source>Taille</source>
<target>Grootte</target>
</phrase>
<phrase>
<source>Tension nominale</source>
<target>Nominale spanning</target>
</phrase>
<phrase>
<source>Tolérance pour cette couleur</source>
<target>Tolerantie voor deze kleur</target>
</phrase>
<phrase>
<source>Tous les fichiers (*)</source>
<target>Alle bestanden (*)</target>
</phrase>
<phrase>
<source>Transformer %1</source>
<target>%1 omvormen</target>
</phrase>
<phrase>
<source>Transparence non conservée</source>
<target>Transparantie niet behouden</target>
</phrase>
<phrase>
<source>un arc</source>
<target>een boog</target>
</phrase>
<phrase>
<source>un coin</source>
<target>een hoek</target>
</phrase>
<phrase>
<source>un point</source>
<target>een punt</target>
</phrase>
<phrase>
<source>une courbe</source>
<target>een curve</target>
</phrase>
<phrase>
<source>une extrémité</source>
<target>een uiteinde</target>
</phrase>
<phrase>
<source>une image</source>
<target>een afbeelding</target>
<definition>part of a sentence listing the content of a diagram</definition>
</phrase>
<phrase>
<source>Verrouiller la numérotation automatique</source>
<target>Automatische nummering vergrendelen</target>
</phrase>
<phrase>
<source>Verrouiller la position</source>
<target>Positie vergrendelen</target>
</phrase>
<phrase>
<source>Verrouillé : modifier la largeur ou la hauteur ajuste l&apos;autre pour conserver les proportions. Cliquer pour déverrouiller.</source>
<target>Vergrendeld: het wijzigen van de breedte of hoogte past de andere aan om de verhoudingen te behouden. Klik om te ontgrendelen.</target>
</phrase>
<phrase>
<source>Échec de l&apos;enregistrement</source>
<target>Opslaan mislukt</target>
</phrase>
<phrase>
<source>Édition des nœuds</source>
<target>Knooppunten bewerken</target>
</phrase>
<phrase>
<source>armoire</source>
<target>kast</target>
<definition>cabinet / enclosure</definition>
</phrase>
<phrase>
<source>bobine</source>
<target>spoel</target>
<definition>coil</definition>
</phrase>
<phrase>
<source>borne</source>
<target>klem</target>
<definition>terminal - a connection point on a symbol</definition>
</phrase>
<phrase>
<source>bornier</source>
<target>klemmenstrook</target>
<definition>terminal strip</definition>
</phrase>
<phrase>
<source>cable</source>
<target>kabel</target>
<definition>cable</definition>
</phrase>
<phrase>
<source>calibre</source>
<target>kaliber</target>
<definition>rating - the current rating of a device</definition>
</phrase>
<phrase>
<source>cartouche</source>
<target>titelblok</target>
<definition>title block - the framed information panel</definition>
</phrase>
<phrase>
<source>collection</source>
<target>collectie</target>
<definition>collection - the symbol library</definition>
</phrase>
<phrase>
<source>conducteur</source>
<target>geleider</target>
<definition>conductor - the drawn wire between terminals</definition>
</phrase>
<phrase>
<source>contact</source>
<target>contact</target>
<definition>contact</definition>
</phrase>
<phrase>
<source>contacteur</source>
<target>contacteur</target>
<definition>contactor</definition>
</phrase>
<phrase>
<source>courant</source>
<target>stroom</target>
<definition>current</definition>
</phrase>
<phrase>
<source>disjoncteur</source>
<target>automaat</target>
<definition>circuit breaker</definition>
</phrase>
<phrase>
<source>dossier</source>
<target>map</target>
<definition>folder</definition>
</phrase>
<phrase>
<source>element</source>
<target>element</target>
<definition>element - a symbol placed on a sheet</definition>
</phrase>
<phrase>
<source>esclave</source>
<target>hulpcontact</target>
<definition>slave - the contact block belonging to a master</definition>
</phrase>
<phrase>
<source>fusible</source>
<target>zekering</target>
<definition>fuse</definition>
</phrase>
<phrase>
<source>grille</source>
<target>raster</target>
<definition>grid</definition>
</phrase>
<phrase>
<source>interrupteur</source>
<target>schakelaar</target>
<definition>switch</definition>
</phrase>
<phrase>
<source>maitre</source>
<target>hoofd</target>
<definition>master - the element a cross-reference points from</definition>
</phrase>
<phrase>
<source>modele</source>
<target>sjabloon</target>
<definition>template</definition>
</phrase>
<phrase>
<source>moteur</source>
<target>motor</target>
<definition>motor</definition>
</phrase>
<phrase>
<source>neutre</source>
<target>nul</target>
<definition>neutral</definition>
</phrase>
<phrase>
<source>nomenclature</source>
<target>stuklijst</target>
<definition>parts list / bill of materials</definition>
</phrase>
<phrase>
<source>numerotation</source>
<target>nummering</target>
<definition>numbering - automatic wire and part numbering</definition>
</phrase>
<phrase>
<source>phase</source>
<target>fase</target>
<definition>phase</definition>
</phrase>
<phrase>
<source>potentiel</source>
<target>potentiaal</target>
<definition>potential - conductors electrically joined as one node</definition>
</phrase>
<phrase>
<source>projet</source>
<target>project</target>
<definition>project - the .qet file holding the sheets</definition>
</phrase>
<phrase>
<source>puissance</source>
<target>vermogen</target>
<definition>power</definition>
</phrase>
<phrase>
<source>relais</source>
<target>relais</target>
<definition>relay</definition>
</phrase>
<phrase>
<source>renvoi de folio</source>
<target>bladverwijzing</target>
<definition>sheet cross-reference</definition>
</phrase>
<phrase>
<source>repere</source>
<target>aanduiding</target>
<definition>designation - the identifying mark on a part</definition>
</phrase>
<phrase>
<source>report de folio</source>
<target>bladverwijzing</target>
<definition>sheet cross-reference (the arrow symbol)</definition>
</phrase>
<phrase>
<source>schema</source>
<target>schema</target>
<definition>diagram</definition>
</phrase>
<phrase>
<source>section</source>
<target>doorsnede</target>
<definition>cross-section - conductor size in mm2</definition>
</phrase>
<phrase>
<source>sommaire</source>
<target>inhoudstafel</target>
<definition>summary / table of contents</definition>
</phrase>
<phrase>
<source>tension</source>
<target>spanning</target>
<definition>voltage</definition>
</phrase>
<phrase>
<source>terre</source>
<target>aarde</target>
<definition>earth / ground</definition>
</phrase>
<phrase>
<source>texte</source>
<target>tekst</target>
<definition>text</definition>
</phrase>
<phrase>
<source>transformateur</source>
<target>transformator</target>
<definition>transformer</definition>
</phrase>
</QPH>
+218
View File
@@ -0,0 +1,218 @@
<!DOCTYPE QPH>
<QPH sourcelanguage="fr_FR" language="pl">
<phrase>
<source>armoire</source>
<target>Szafa</target>
<definition>cabinet / enclosure</definition>
</phrase>
<phrase>
<source>bobine</source>
<target>Cewka</target>
<definition>coil</definition>
</phrase>
<phrase>
<source>borne</source>
<target>Zacisk</target>
<definition>terminal - a connection point on a symbol</definition>
</phrase>
<phrase>
<source>bornier</source>
<target>Listwa zaciskowa</target>
<definition>terminal strip</definition>
</phrase>
<phrase>
<source>cable</source>
<target>Kabel</target>
<definition>cable</definition>
</phrase>
<phrase>
<source>calibre</source>
<target>Prąd znamionowy</target>
<definition>rating - the current rating of a device</definition>
</phrase>
<phrase>
<source>cartouche</source>
<target>Tabliczka rysunkowa</target>
<definition>title block - the framed information panel</definition>
</phrase>
<phrase>
<source>champ de texte</source>
<target>Pole tekstowe</target>
<definition>text field</definition>
</phrase>
<phrase>
<source>collection</source>
<target>Biblioteka</target>
<definition>collection - the symbol library</definition>
</phrase>
<phrase>
<source>conducteur</source>
<target>Przewód</target>
<definition>conductor - the drawn wire between terminals</definition>
</phrase>
<phrase>
<source>contact</source>
<target>Styk</target>
<definition>contact</definition>
</phrase>
<phrase>
<source>contacteur</source>
<target>Stycznik</target>
<definition>contactor</definition>
</phrase>
<phrase>
<source>courant</source>
<target>Prąd</target>
<definition>current</definition>
</phrase>
<phrase>
<source>disjoncteur</source>
<target>Wyłącznik nadprądowy</target>
<definition>circuit breaker</definition>
</phrase>
<phrase>
<source>dossier</source>
<target>Folder</target>
<definition>folder</definition>
</phrase>
<phrase>
<source>element</source>
<target>Element</target>
<definition>element - a symbol placed on a sheet</definition>
</phrase>
<phrase>
<source>esclave</source>
<target>Element podrzędny</target>
<definition>slave - the contact block belonging to a master</definition>
</phrase>
<phrase>
<source>fil</source>
<target>Przewód</target>
<definition>wire</definition>
</phrase>
<phrase>
<source>folio</source>
<target>Arkusz</target>
<definition>sheet - one drawing of a set</definition>
</phrase>
<phrase>
<source>fusible</source>
<target>Bezpiecznik</target>
<definition>fuse</definition>
</phrase>
<phrase>
<source>grille</source>
<target>Siatka</target>
<definition>grid</definition>
</phrase>
<phrase>
<source>interrupteur</source>
<target>Wyłącznik</target>
<definition>switch</definition>
</phrase>
<phrase>
<source>maitre</source>
<target>Element główny</target>
<definition>master - the element a cross-reference points from</definition>
</phrase>
<phrase>
<source>modele</source>
<target>Szablon</target>
<definition>template</definition>
</phrase>
<phrase>
<source>moteur</source>
<target>Silnik</target>
<definition>motor</definition>
</phrase>
<phrase>
<source>neutre</source>
<target>Neutralny</target>
<definition>neutral</definition>
</phrase>
<phrase>
<source>nomenclature</source>
<target>Zestawienie materiałów</target>
<definition>parts list / bill of materials</definition>
</phrase>
<phrase>
<source>numerotation</source>
<target>Numeracja</target>
<definition>numbering - automatic wire and part numbering</definition>
</phrase>
<phrase>
<source>phase</source>
<target>Faza</target>
<definition>phase</definition>
</phrase>
<phrase>
<source>potentiel</source>
<target>Potencjał</target>
<definition>potential - conductors electrically joined as one node</definition>
</phrase>
<phrase>
<source>projet</source>
<target>Projekt</target>
<definition>project - the .qet file holding the sheets</definition>
</phrase>
<phrase>
<source>puissance</source>
<target>Moc</target>
<definition>power</definition>
</phrase>
<phrase>
<source>relais</source>
<target>Przekaźnik</target>
<definition>relay</definition>
</phrase>
<phrase>
<source>renvoi de folio</source>
<target>Odnośnik do arkusza</target>
<definition>sheet cross-reference</definition>
</phrase>
<phrase>
<source>repere</source>
<target>Oznaczenie</target>
<definition>designation - the identifying mark on a part</definition>
</phrase>
<phrase>
<source>report de folio</source>
<target>Odnośnik do arkusza</target>
<definition>sheet cross-reference (the arrow symbol)</definition>
</phrase>
<phrase>
<source>schema</source>
<target>Schemat</target>
<definition>diagram</definition>
</phrase>
<phrase>
<source>section</source>
<target>Przekrój</target>
<definition>cross-section - conductor size in mm2</definition>
</phrase>
<phrase>
<source>sommaire</source>
<target>Spis treści</target>
<definition>summary / table of contents</definition>
</phrase>
<phrase>
<source>tension</source>
<target>Napięcie</target>
<definition>voltage</definition>
</phrase>
<phrase>
<source>terre</source>
<target>Uziemienie</target>
<definition>earth / ground</definition>
</phrase>
<phrase>
<source>texte</source>
<target>Tekst</target>
<definition>text</definition>
</phrase>
<phrase>
<source>transformateur</source>
<target>Transformator</target>
<definition>transformer</definition>
</phrase>
</QPH>
File diff suppressed because it is too large Load Diff
+465
View File
@@ -0,0 +1,465 @@
<!DOCTYPE QPH>
<QPH sourcelanguage="fr_FR" language="pt_BR">
<phrase>
<source> Contacts : NO : %1, NC : %2, inverseurs : %3, autres : %4
</source>
<target>Contatos: NA: %1, NF: %2, reversíveis: %3, outros: %4
</target>
</phrase>
<phrase>
<source> Contacts : NO : %1/%2, NC : %3/%4, inverseurs : %5/%6, autres : %7/%8
</source>
<target>Contatos: NA: %1/%2, NF: %3/%4, reversíveis: %5/%6, outros: %7/%8
</target>
</phrase>
<phrase>
<source>Aperçu</source>
<target>Pré-visualização</target>
</phrase>
<phrase>
<source>Arrondir les coins d&apos;%1</source>
<target>Arredondar os cantos de %1</target>
</phrase>
<phrase>
<source>Borne 1</source>
<target>Borne 1</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Borne 2</source>
<target>Borne 2</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Catégorie</source>
<target>Categoria</target>
</phrase>
<phrase>
<source>Ce format ne prend pas en charge la transparence : l&apos;image sera enregistrée telle qu&apos;elle était avant l&apos;application de la couleur transparente. Continuer ?</source>
<target>Este formato não suporta transparência: a imagem será salva como estava antes da aplicação da cor transparente. Continuar?</target>
</phrase>
<phrase>
<source>Champ de texte</source>
<target>Campo de texto</target>
</phrase>
<phrase>
<source>Composant 1</source>
<target>Componente 1</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Composant 2</source>
<target>Componente 2</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Convertir %1 en courbe de Bézier</source>
<target>Converter %1 em curva de Bézier</target>
</phrase>
<phrase>
<source>Convertir en courbe de Bézier</source>
<target>Converter em curva de Bézier</target>
</phrase>
<phrase>
<source>Courant nominal</source>
<target>Corrente nominal</target>
</phrase>
<phrase>
<source>Distance in pixels between the label and the slave cross reference</source>
<target>Distância em pixels entre o rótulo e a referência cruzada do escravo</target>
</phrase>
<phrase>
<source>Distance label - slave :</source>
<target>Distância do rótulo - escravo:</target>
</phrase>
<phrase>
<source>Enregistrer l&apos;image d&apos;origine sous...</source>
<target>Salvar a imagem original como...</target>
</phrase>
<phrase>
<source>Enregistrer l&apos;image sous...</source>
<target>Salvar a imagem como...</target>
</phrase>
<phrase>
<source>Erreur</source>
<target>Erro</target>
</phrase>
<phrase>
<source>Exclure de la nomenclature</source>
<target>Excluir da lista de materiais</target>
</phrase>
<phrase>
<source>Faire pivoter %1</source>
<target>Girar %1</target>
</phrase>
<phrase>
<source>Faire pivoter une image</source>
<target>Girar uma imagem</target>
</phrase>
<phrase>
<source>Fil</source>
<target>Fio</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Folio</source>
<target>Folha</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Hauteur</source>
<target>Altura</target>
</phrase>
<phrase>
<source>Image BMP (*.bmp)</source>
<target>Imagem BMP (*.bmp)</target>
</phrase>
<phrase>
<source>Image JPEG (*.jpg *.jpeg)</source>
<target>Imagem JPEG (*.jpg *.jpeg)</target>
</phrase>
<phrase>
<source>Image PNG (*.png)</source>
<target>Imagem PNG (*.png)</target>
</phrase>
<phrase>
<source>Image SVG (*.svg)</source>
<target>Imagem SVG (*.svg)</target>
</phrase>
<phrase>
<source>Images non incluses dans l&apos;export DXF</source>
<target>Imagens não incluídas na exportação DXF</target>
<definition>message box title</definition>
</phrase>
<phrase>
<source>Impossible d&apos;enregistrer l&apos;image à cet emplacement.</source>
<target>Não foi possível salvar a imagem neste local.</target>
</phrase>
<phrase>
<source>Impossible d&apos;enregistrer la nomenclature dans %1.
%2</source>
<target>Não foi possível salvar a lista de materiais em %1.
%2</target>
</phrase>
<phrase>
<source>Impossible de charger l&apos;image.</source>
<target>Não foi possível carregar a imagem.</target>
</phrase>
<phrase>
<source>Incliner %1</source>
<target>Inclinar %1</target>
</phrase>
<phrase>
<source>Incliner une image</source>
<target>Inclinar uma imagem</target>
</phrase>
<phrase>
<source>La limite fixée pour cet élément maître est atteinte (Limite: %1).
Voulez-vous tout de même lier ce contact esclave ?</source>
<target>O limite definido para este elemento mestre foi atingido (Limite: %1).
Deseja vincular este contato escravo mesmo assim?</target>
</phrase>
<phrase>
<source>Largeur</source>
<target>Largura</target>
</phrase>
<phrase>
<source>Le format DXF utilisé ici (AC1006) ne permet pas d&apos;inclure d&apos;image. Les images seront représentées uniquement par un rectangle de contour (position, taille, rotation et inclinaison conservées), sans le contenu de l&apos;image.</source>
<target>O formato DXF usado aqui (AC1006) não permite incluir imagens. As imagens serão representadas apenas por um retângulo de contorno (posição, tamanho, rotação e inclinação preservados), sem o conteúdo da imagem.</target>
<definition>message box content</definition>
</phrase>
<phrase>
<source>Liste de câblage</source>
<target>Lista de cabeamento</target>
<definition>window title</definition>
</phrase>
<phrase>
<source>Liste de câblage (base de données)</source>
<target>Lista de cabeamento (banco de dados)</target>
</phrase>
<phrase>
<source>margin: 5px; font-weight: bold;</source>
<target>margin: 5px; font-weight: bold;</target>
</phrase>
<phrase>
<source>Modifier l&apos;angle d&apos;un arc</source>
<target>Modificar o ângulo de um arco</target>
</phrase>
<phrase>
<source>Modifier la courbure d&apos;%1</source>
<target>Modificar a curvatura de %1</target>
</phrase>
<phrase>
<source>Modifier la forme d&apos;%1</source>
<target>Modificar a forma de %1</target>
</phrase>
<phrase>
<source>Modèle</source>
<target>Modelo</target>
</phrase>
<phrase>
<source>Nombre maximum de contacts esclaves définis : non défini
</source>
<target>Número máximo de contatos escravos definidos: não definido
</target>
</phrase>
<phrase>
<source>Notes</source>
<target>Observações</target>
</phrase>
<phrase>
<source>Redimensionner %1</source>
<target>Redimensionar %1</target>
</phrase>
<phrase>
<source>Redimensionner une image</source>
<target>Redimensionar uma imagem</target>
</phrase>
<phrase>
<source>Réinitialiser</source>
<target>Redefinir</target>
</phrase>
<phrase>
<source>Selectionner une image...</source>
<target>Selecionar uma imagem...</target>
</phrase>
<phrase>
<source>Séparation de potentiel</source>
<target>Separação de potencial</target>
</phrase>
<phrase>
<source>Taille</source>
<target>Tamanho</target>
</phrase>
<phrase>
<source>Tension nominale</source>
<target>Tensão nominal</target>
</phrase>
<phrase>
<source>Tous les fichiers (*)</source>
<target>Todos os arquivos (*)</target>
</phrase>
<phrase>
<source>Transparence non conservée</source>
<target>Transparência não preservada</target>
</phrase>
<phrase>
<source>une image</source>
<target>uma imagem</target>
<definition>part of a sentence listing the content of a diagram</definition>
</phrase>
<phrase>
<source>Verrouiller la numérotation automatique</source>
<target>Bloquear a numeração automática</target>
</phrase>
<phrase>
<source>Verrouiller la position</source>
<target>Bloquear a posição</target>
</phrase>
<phrase>
<source>Échec de l&apos;enregistrement</source>
<target>Falha ao salvar</target>
</phrase>
<phrase>
<source>armoire</source>
<target>armário</target>
<definition>cabinet / enclosure</definition>
</phrase>
<phrase>
<source>bobine</source>
<target>bobina</target>
<definition>coil</definition>
</phrase>
<phrase>
<source>borne</source>
<target>borne</target>
<definition>terminal - a connection point on a symbol</definition>
</phrase>
<phrase>
<source>bornier</source>
<target>borneira</target>
<definition>terminal strip</definition>
</phrase>
<phrase>
<source>cable</source>
<target>cabo</target>
<definition>cable</definition>
</phrase>
<phrase>
<source>calibre</source>
<target>calibre</target>
<definition>rating - the current rating of a device</definition>
</phrase>
<phrase>
<source>cartouche</source>
<target>bloco de título</target>
<definition>title block - the framed information panel</definition>
</phrase>
<phrase>
<source>collection</source>
<target>coleção</target>
<definition>collection - the symbol library</definition>
</phrase>
<phrase>
<source>conducteur</source>
<target>condutor</target>
<definition>conductor - the drawn wire between terminals</definition>
</phrase>
<phrase>
<source>contact</source>
<target>contato</target>
<definition>contact</definition>
</phrase>
<phrase>
<source>contacteur</source>
<target>contator</target>
<definition>contactor</definition>
</phrase>
<phrase>
<source>courant</source>
<target>corrente</target>
<definition>current</definition>
</phrase>
<phrase>
<source>disjoncteur</source>
<target>disjuntor</target>
<definition>circuit breaker</definition>
</phrase>
<phrase>
<source>dossier</source>
<target>pasta</target>
<definition>folder</definition>
</phrase>
<phrase>
<source>element</source>
<target>elemento</target>
<definition>element - a symbol placed on a sheet</definition>
</phrase>
<phrase>
<source>esclave</source>
<target>escravo</target>
<definition>slave - the contact block belonging to a master</definition>
</phrase>
<phrase>
<source>fusible</source>
<target>fusível</target>
<definition>fuse</definition>
</phrase>
<phrase>
<source>grille</source>
<target>grade</target>
<definition>grid</definition>
</phrase>
<phrase>
<source>interrupteur</source>
<target>interruptor</target>
<definition>switch</definition>
</phrase>
<phrase>
<source>maitre</source>
<target>mestre</target>
<definition>master - the element a cross-reference points from</definition>
</phrase>
<phrase>
<source>modele</source>
<target>modelo</target>
<definition>template</definition>
</phrase>
<phrase>
<source>moteur</source>
<target>motor</target>
<definition>motor</definition>
</phrase>
<phrase>
<source>neutre</source>
<target>neutro</target>
<definition>neutral</definition>
</phrase>
<phrase>
<source>nomenclature</source>
<target>lista de materiais</target>
<definition>parts list / bill of materials</definition>
</phrase>
<phrase>
<source>numerotation</source>
<target>numeração</target>
<definition>numbering - automatic wire and part numbering</definition>
</phrase>
<phrase>
<source>phase</source>
<target>fase</target>
<definition>phase</definition>
</phrase>
<phrase>
<source>potentiel</source>
<target>potencial</target>
<definition>potential - conductors electrically joined as one node</definition>
</phrase>
<phrase>
<source>projet</source>
<target>projeto</target>
<definition>project - the .qet file holding the sheets</definition>
</phrase>
<phrase>
<source>puissance</source>
<target>potência</target>
<definition>power</definition>
</phrase>
<phrase>
<source>relais</source>
<target>relé</target>
<definition>relay</definition>
</phrase>
<phrase>
<source>renvoi de folio</source>
<target>referência de folha</target>
<definition>sheet cross-reference</definition>
</phrase>
<phrase>
<source>repere</source>
<target>designação</target>
<definition>designation - the identifying mark on a part</definition>
</phrase>
<phrase>
<source>report de folio</source>
<target>remissão de folha</target>
<definition>sheet cross-reference (the arrow symbol)</definition>
</phrase>
<phrase>
<source>schema</source>
<target>diagrama</target>
<definition>diagram</definition>
</phrase>
<phrase>
<source>section</source>
<target>seção</target>
<definition>cross-section - conductor size in mm2</definition>
</phrase>
<phrase>
<source>sommaire</source>
<target>sumário</target>
<definition>summary / table of contents</definition>
</phrase>
<phrase>
<source>tension</source>
<target>tensão</target>
<definition>voltage</definition>
</phrase>
<phrase>
<source>terre</source>
<target>terra</target>
<definition>earth / ground</definition>
</phrase>
<phrase>
<source>texte</source>
<target>texto</target>
<definition>text</definition>
</phrase>
<phrase>
<source>transformateur</source>
<target>transformador</target>
<definition>transformer</definition>
</phrase>
</QPH>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+917
View File
@@ -0,0 +1,917 @@
<!DOCTYPE QPH>
<QPH sourcelanguage="fr_FR" language="zh">
<phrase>
<source> Contacts : NO : %1, NC : %2, inverseurs : %3, autres : %4
</source>
<target>触点:常开:%1,常闭:%2,转换:%3,其他:%4
</target>
</phrase>
<phrase>
<source> Contacts : NO : %1/%2, NC : %3/%4, inverseurs : %5/%6, autres : %7/%8
</source>
<target>触点:常开:%1/%2,常闭:%3/%4,转换:%5/%6,其他:%7/%8
</target>
</phrase>
<phrase>
<source> %</source>
<target>%</target>
</phrase>
<phrase>
<source> (Ctrl pendant le glissement = position libre, sans accrochage à la grille)</source>
<target>(拖动时按 Ctrl = 自由位置,不吸附到网格)</target>
</phrase>
<phrase>
<source> -- %1 : mode %2</source>
<target>-- %1%2 模式</target>
</phrase>
<phrase>
<source> ; point rouge : glisser pour repositionner le centre de rotation</source>
<target>;红点:拖动以重新定位旋转中心</target>
</phrase>
<phrase>
<source> ; point turquoise : arc</source>
<target>;青色点:圆弧</target>
</phrase>
<phrase>
<source> ; un bord : inclinaison</source>
<target>;边:倾斜</target>
</phrase>
<phrase>
<source> °</source>
<target>°</target>
</phrase>
<phrase>
<source> — Cliquer : mode %1</source>
<target>— 单击:%1 模式</target>
</phrase>
<phrase>
<source>, Alt = créer des poignées</source>
<target>Alt = 创建控制柄</target>
</phrase>
<phrase>
<source>, Alt = détacher en polyligne</source>
<target>Alt = 分离为多段线</target>
</phrase>
<phrase>
<source>Ajoute une courbe de Bézier sur le folio actuel</source>
<target>在当前图纸上添加贝塞尔曲线</target>
</phrase>
<phrase>
<source>Ajouter un point à une courbe</source>
<target>向曲线添加点</target>
</phrase>
<phrase>
<source>Ajouter une courbe</source>
<target>添加曲线</target>
</phrase>
<phrase>
<source>Angle</source>
<target>角度</target>
</phrase>
<phrase>
<source>Anguleux</source>
<target>角点</target>
</phrase>
<phrase>
<source>Aperçu</source>
<target>预览</target>
</phrase>
<phrase>
<source>Arrondir les coins d&apos;%1</source>
<target>将%1的角变圆</target>
</phrase>
<phrase>
<source>Borne 1</source>
<target>端子1</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Borne 2</source>
<target>端子2</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Catégorie</source>
<target>类别</target>
</phrase>
<phrase>
<source>Ce format ne prend pas en charge la transparence : l&apos;image sera enregistrée telle qu&apos;elle était avant l&apos;application de la couleur transparente. Continuer ?</source>
<target>此格式不支持透明度:图像将按应用透明色之前的状态保存。是否继续?</target>
</phrase>
<phrase>
<source>Champ de texte</source>
<target>文本字段</target>
</phrase>
<phrase>
<source>Clic : positionner à la taille d&apos;origine. Cliquer-glisser : positionner et redimensionner. Clic droit : pivoter de 90°. Ctrl+molette : ajuster la taille.</source>
<target>单击:按原始尺寸放置。单击拖动:放置并调整大小。右键:旋转 90°。Ctrl+滚轮:调整大小。</target>
</phrase>
<phrase>
<source>Clic gauche : point suivant ; double-clic ou Entrée : terminer ; clic droit : annuler le dernier point</source>
<target>左键单击:下一个点;双击或 Enter:结束;右键单击:撤销上一个点</target>
</phrase>
<phrase>
<source>Clic gauche : positionner le coin opposé (Maj = carré, Ctrl = depuis le centre + position libre, Ctrl+Maj = carré centré) ; clic droit : annuler</source>
<target>左键单击:放置对角(Shift = 正方形,Ctrl = 从中心 + 自由位置,Ctrl+Shift = 居中正方形);右键单击:取消</target>
</phrase>
<phrase>
<source>Clic gauche : positionner le coin opposé (Maj = cercle, Ctrl = depuis le centre + position libre, Ctrl+Maj = cercle centré) ; clic droit : annuler</source>
<target>左键单击:放置对角(Shift = 圆形,Ctrl = 从中心 + 自由位置,Ctrl+Shift = 居中圆形);右键单击:取消</target>
</phrase>
<phrase>
<source>Clic gauche : positionner le point de départ (Ctrl = position libre)</source>
<target>左键单击:放置起点(Ctrl = 自由位置)</target>
</phrase>
<phrase>
<source>Clic gauche : positionner le point final (Ctrl = position libre) ; clic droit : annuler</source>
<target>左键单击:放置终点(Ctrl = 自由位置);右键单击:取消</target>
</phrase>
<phrase>
<source>Clic gauche : positionner le premier coin (Ctrl = point central, position libre)</source>
<target>左键单击:放置第一个角(Ctrl = 中心点,自由位置)</target>
</phrase>
<phrase>
<source>Clic gauche : positionner le premier point (Ctrl = position libre)</source>
<target>左键单击:放置第一个点(Ctrl = 自由位置)</target>
</phrase>
<phrase>
<source>Clic: point anguleux. Cliquer-glisser: point courbe. Clic sur le premier point: fermer. Échap/Entrée: terminer. Clic droit: annuler le dernier point.</source>
<target>单击:角点。单击拖动:曲线点。单击第一个点:闭合。Esc/Enter:结束。右键:撤销上一个点。</target>
</phrase>
<phrase>
<source>Cliquer</source>
<target>单击</target>
</phrase>
<phrase>
<source>Cliquer : mode %1</source>
<target>单击:%1 模式</target>
</phrase>
<phrase>
<source>Cliquez pour choisir une couleur</source>
<target>点击选择颜色</target>
</phrase>
<phrase>
<source>Cliquez sur l&apos;image pour ajouter une couleur. Ajustez la tolérance de chaque couleur avec son curseur, ou cliquez sur × pour la retirer.</source>
<target>单击图像以添加颜色。使用滑块调整每种颜色的容差,或单击 × 将其移除。</target>
</phrase>
<phrase>
<source>Cliquez sur l&apos;image pour choisir une couleur</source>
<target>单击图像选择颜色</target>
</phrase>
<phrase>
<source>Coins arrondis</source>
<target>圆角</target>
</phrase>
<phrase>
<source>Composant 1</source>
<target>元件1</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Composant 2</source>
<target>元件2</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Convertir %1 en courbe de Bézier</source>
<target>将 %1 转换为贝塞尔曲线</target>
</phrase>
<phrase>
<source>Convertir %1 en polyligne</source>
<target>将 %1 转换为多段线</target>
</phrase>
<phrase>
<source>Convertir en courbe de Bézier</source>
<target>转换为贝塞尔曲线</target>
</phrase>
<phrase>
<source>Convertir en polyligne</source>
<target>转换为多段线</target>
</phrase>
<phrase>
<source>Couleur transparente</source>
<target>透明色</target>
</phrase>
<phrase>
<source>Couleur transparente...</source>
<target>透明色...</target>
</phrase>
<phrase>
<source>Courant nominal</source>
<target>额定电流</target>
</phrase>
<phrase>
<source>Deplacer le centre de rotation</source>
<target>移动旋转中心</target>
</phrase>
<phrase>
<source>Distance in pixels between the label and the slave cross reference</source>
<target>标签与从站交叉引用之间的像素距离</target>
</phrase>
<phrase>
<source>Distance label - slave :</source>
<target>标签距离 - 从站:</target>
</phrase>
<phrase>
<source>Définir une couleur transparente</source>
<target>设置透明色</target>
</phrase>
<phrase>
<source>Déformer une courbe</source>
<target>变形曲线</target>
</phrase>
<phrase>
<source>Déplacer le centre de rotation d&apos;une image</source>
<target>移动图像的旋转中心</target>
</phrase>
<phrase>
<source>Déverrouillé : largeur et hauteur peuvent être modifiées indépendamment. Cliquer pour verrouiller.</source>
<target>已解锁:宽度和高度可独立修改。单击锁定。</target>
</phrase>
<phrase>
<source>Enregistrer l&apos;image d&apos;origine sous...</source>
<target>原始图像另存为...</target>
</phrase>
<phrase>
<source>Enregistrer l&apos;image sous...</source>
<target>图像另存为...</target>
</phrase>
<phrase>
<source>Erreur</source>
<target>错误</target>
</phrase>
<phrase>
<source>Exclure de la nomenclature</source>
<target>从物料清单中排除</target>
</phrase>
<phrase>
<source>Faire pivoter %1</source>
<target>旋转 %1</target>
</phrase>
<phrase>
<source>Faire pivoter une image</source>
<target>旋转图像</target>
</phrase>
<phrase>
<source>Faites glisser les poignées, ou l&apos;intérieur du cadre, pour ajuster la zone à conserver.</source>
<target>拖动控制柄或框内区域,调整要保留的区域。</target>
</phrase>
<phrase>
<source>Fil</source>
<target>导线</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Folio</source>
<target>图页</target>
<definition>column title</definition>
</phrase>
<phrase>
<source>Forme fermée</source>
<target>闭合形状</target>
</phrase>
<phrase>
<source>Glisser %1 : rotation (Maj = 15°)</source>
<target>拖动 %1:旋转(Shift = 15°)</target>
</phrase>
<phrase>
<source>Glisser : ajuster l&apos;arc (Ctrl = position libre, Maj = 15°)</source>
<target>拖动:调整圆弧(Ctrl = 自由位置,Shift = 15°)</target>
</phrase>
<phrase>
<source>Glisser : arrondir les coins (Ctrl = position libre)</source>
<target>拖动:圆角(Ctrl = 自由位置)</target>
</phrase>
<phrase>
<source>Glisser : déformer la courbe (Ctrl = position libre, Alt = briser la tangente)</source>
<target>拖动:变形曲线(Ctrl = 自由位置,Alt = 断开切线)</target>
</phrase>
<phrase>
<source>Glisser : déplacer ce point</source>
<target>拖动:移动此点</target>
</phrase>
<phrase>
<source>Glisser : déplacer le centre de rotation</source>
<target>拖动:移动旋转中心</target>
</phrase>
<phrase>
<source>Glisser : déplacer le point (Ctrl = position libre</source>
<target>拖动:移动点(Ctrl = 自由位置</target>
</phrase>
<phrase>
<source>Glisser : inclinaison (Ctrl = position libre, Maj = 15°)</source>
<target>拖动:倾斜(Ctrl = 自由位置,Shift = 15°)</target>
</phrase>
<phrase>
<source>Glisser : incliner (Maj = par pas de 15°)</source>
<target>拖动:倾斜(Shift = 以 15° 为步长)</target>
</phrase>
<phrase>
<source>Glisser : pivoter (Maj = par pas de 15°)</source>
<target>拖动:旋转(Shift = 以 15° 为步长)</target>
</phrase>
<phrase>
<source>Glisser : redimensionner (Ctrl = depuis le centre + position libre, Maj = proportions</source>
<target>拖动:调整大小(Ctrl = 从中心 + 自由位置,Shift = 比例</target>
</phrase>
<phrase>
<source>Glisser : redimensionner (Maj = conserver les proportions, Ctrl = depuis le centre)</source>
<target>拖动:调整大小(Shift = 保持比例,Ctrl = 从中心)</target>
</phrase>
<phrase>
<source>Glisser : repositionner le centre de rotation (Ctrl = position libre)</source>
<target>拖动:重新定位旋转中心(Ctrl = 自由位置)</target>
</phrase>
<phrase>
<source>Glisser : rotation (Ctrl = position libre, Maj = 15°)</source>
<target>拖动:旋转(Ctrl = 自由位置,Shift = 15°)</target>
</phrase>
<phrase>
<source>Glisser le point violet : arrondir les coins</source>
<target>拖动紫色点:圆角</target>
</phrase>
<phrase>
<source>Glisser un coin : pivoter (Maj = par pas de 15°) ; glisser un bord : incliner (Maj = par pas de 15°) ; point rouge : déplacer le centre de rotation</source>
<target>拖动角:旋转(Shift = 以 15° 为步长);拖动边:倾斜(Shift = 以 15° 为步长);红点:移动旋转中心</target>
</phrase>
<phrase>
<source>Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = conserver les proportions)</source>
<target>拖动角/边:调整大小(Ctrl = 从中心,Shift = 保持比例)</target>
</phrase>
<phrase>
<source>Glisser un coin/bord : redimensionner (Ctrl = depuis le centre, Maj = proportions, Alt = détacher en polyligne)</source>
<target>拖动角/边:调整大小(Ctrl = 从中心,Shift = 比例,Alt = 分离为多段线)</target>
</phrase>
<phrase>
<source>Glisser un point : le déplacer</source>
<target>拖动点:移动它</target>
</phrase>
<phrase>
<source>Glisser une extrémité : la déplacer</source>
<target>拖动端点:移动它</target>
</phrase>
<phrase>
<source>Glisser une poignée ou la courbe : déformer (Alt = briser la tangente) ; Alt+glisser un point anguleux : créer des poignées ; clic droit : menu du nœud le plus proche</source>
<target>拖动控制柄或曲线:变形(Alt = 断开切线);Alt+拖动角点:创建控制柄;右键单击:最近节点菜单</target>
</phrase>
<phrase>
<source>Géométrie</source>
<target>几何</target>
</phrase>
<phrase>
<source>Hauteur</source>
<target>高度</target>
</phrase>
<phrase>
<source>Image BMP (*.bmp)</source>
<target>BMP 图像 (*.bmp)</target>
</phrase>
<phrase>
<source>Image Files (*.png *.jpg *.jpeg *.bmp *.svg)</source>
<target>图像文件 (*.png *.jpg *.jpeg *.bmp *.svg)</target>
</phrase>
<phrase>
<source>Image JPEG (*.jpg *.jpeg)</source>
<target>JPEG 图像 (*.jpg *.jpeg)</target>
</phrase>
<phrase>
<source>Image PNG (*.png)</source>
<target>PNG 图像 (*.png)</target>
</phrase>
<phrase>
<source>Image source</source>
<target>源图像</target>
</phrase>
<phrase>
<source>Image SVG (*.svg)</source>
<target>SVG 图像 (*.svg)</target>
</phrase>
<phrase>
<source>Images non incluses dans l&apos;export DXF</source>
<target>图像未包含在 DXF 导出中</target>
<definition>message box title</definition>
</phrase>
<phrase>
<source>Impossible d&apos;enregistrer l&apos;image à cet emplacement.</source>
<target>无法将图像保存到该位置。</target>
</phrase>
<phrase>
<source>Impossible d&apos;enregistrer la nomenclature dans %1.
%2</source>
<target>无法将物料清单保存到 %1。
%2</target>
</phrase>
<phrase>
<source>Impossible de charger l&apos;image.</source>
<target>无法加载图像。</target>
</phrase>
<phrase>
<source>Inclinaison X</source>
<target>X 倾斜</target>
</phrase>
<phrase>
<source>Inclinaison Y</source>
<target>Y 倾斜</target>
</phrase>
<phrase>
<source>Incliner %1</source>
<target>倾斜 %1</target>
</phrase>
<phrase>
<source>Incliner une image</source>
<target>倾斜图像</target>
</phrase>
<phrase>
<source>La limite fixée pour cet élément maître est atteinte (Limite: %1).
Voulez-vous tout de même lier ce contact esclave ?</source>
<target>已达到此主元件的限制(限制:%1)。
是否仍要链接此从属触点?</target>
</phrase>
<phrase>
<source>Largeur</source>
<target>宽度</target>
</phrase>
<phrase>
<source>Le format DXF utilisé ici (AC1006) ne permet pas d&apos;inclure d&apos;image. Les images seront représentées uniquement par un rectangle de contour (position, taille, rotation et inclinaison conservées), sans le contenu de l&apos;image.</source>
<target>此处使用的 DXF 格式 (AC1006) 无法包含图像。图像将仅以轮廓矩形表示(保留位置、大小、旋转和倾斜),不包含图像内容。</target>
<definition>message box content</definition>
</phrase>
<phrase>
<source>Lisse</source>
<target>平滑</target>
</phrase>
<phrase>
<source>Liste de câblage</source>
<target>接线列表</target>
<definition>window title</definition>
</phrase>
<phrase>
<source>Liste de câblage (base de données)</source>
<target>接线列表(数据库)</target>
</phrase>
<phrase>
<source>Longueur</source>
<target>长度</target>
</phrase>
<phrase>
<source>margin: 5px; font-weight: bold;</source>
<target>margin: 5px; font-weight: bold;</target>
</phrase>
<phrase>
<source>Miroir horizontal</source>
<target>水平镜像</target>
</phrase>
<phrase>
<source>Miroir horizontal d&apos;une image</source>
<target>图像水平镜像</target>
</phrase>
<phrase>
<source>Miroir horizontal de %1</source>
<target>%1 的水平镜像</target>
</phrase>
<phrase>
<source>Miroir impossible : inclinaison trop extrême pour cette forme</source>
<target>无法镜像:此形状的倾斜过于极端</target>
</phrase>
<phrase>
<source>Miroir vertical</source>
<target>垂直镜像</target>
</phrase>
<phrase>
<source>Miroir vertical d&apos;une image</source>
<target>图像垂直镜像</target>
</phrase>
<phrase>
<source>Miroir vertical de %1</source>
<target>%1 的垂直镜像</target>
</phrase>
<phrase>
<source>Modifier l&apos;angle d&apos;un arc</source>
<target>修改弧的角度</target>
</phrase>
<phrase>
<source>Modifier l&apos;angle d&apos;une forme</source>
<target>修改形状角度</target>
</phrase>
<phrase>
<source>Modifier l&apos;angle d&apos;une image</source>
<target>修改图像角度</target>
</phrase>
<phrase>
<source>Modifier l&apos;inclinaison d&apos;une image</source>
<target>修改图像倾斜</target>
</phrase>
<phrase>
<source>Modifier la courbure d&apos;%1</source>
<target>修改%1的曲率</target>
</phrase>
<phrase>
<source>Modifier la forme d&apos;%1</source>
<target>修改%1的形状</target>
</phrase>
<phrase>
<source>Modifier la hauteur d&apos;une image</source>
<target>修改图像高度</target>
</phrase>
<phrase>
<source>Modifier la largeur d&apos;une image</source>
<target>修改图像宽度</target>
</phrase>
<phrase>
<source>Modifier la longueur d&apos;une ligne</source>
<target>修改线条长度</target>
</phrase>
<phrase>
<source>Modifier la taille d&apos;une forme</source>
<target>修改形状大小</target>
</phrase>
<phrase>
<source>Modifier le type d&apos;un nœud</source>
<target>修改节点类型</target>
</phrase>
<phrase>
<source>Modifier une image</source>
<target>修改图像</target>
</phrase>
<phrase>
<source>Modèle</source>
<target>型号</target>
</phrase>
<phrase>
<source>Nombre maximum de contacts esclaves définis : non défini
</source>
<target>已定义的从属触点最大数量:未定义
</target>
</phrase>
<phrase>
<source>Notes</source>
<target>备注</target>
</phrase>
<phrase>
<source>Nœud le plus proche</source>
<target>最近节点</target>
</phrase>
<phrase>
<source>pivoter/incliner</source>
<target>旋转/倾斜</target>
</phrase>
<phrase>
<source>Rayon X</source>
<target>X半径</target>
</phrase>
<phrase>
<source>Rayon Y</source>
<target>Y半径</target>
</phrase>
<phrase>
<source>redimensionner</source>
<target>调整大小</target>
</phrase>
<phrase>
<source>Redimensionner %1</source>
<target>调整 %1 大小</target>
</phrase>
<phrase>
<source>Redimensionner une image</source>
<target>调整图像大小</target>
</phrase>
<phrase>
<source>Remplacer l&apos;image...</source>
<target>替换图像...</target>
</phrase>
<phrase>
<source>Remplacer une image</source>
<target>替换图像</target>
</phrase>
<phrase>
<source>Restaurer les proportions</source>
<target>恢复比例</target>
</phrase>
<phrase>
<source>Restaurer les proportions d&apos;une image</source>
<target>恢复图像比例</target>
</phrase>
<phrase>
<source>Retirer cette couleur</source>
<target>移除此颜色</target>
</phrase>
<phrase>
<source>Revenir à l&apos;image complète, sans rognage</source>
<target>恢复为完整图像,不裁剪</target>
</phrase>
<phrase>
<source>rgb(%1, %2, %3)</source>
<target>rgb(%1, %2, %3)</target>
</phrase>
<phrase>
<source>Rogner l&apos;image</source>
<target>裁剪图像</target>
</phrase>
<phrase>
<source>Rogner une image</source>
<target>裁剪图像</target>
</phrase>
<phrase>
<source>Rogner...</source>
<target>裁剪...</target>
</phrase>
<phrase>
<source>Rotation/Inclinaison</source>
<target>旋转/倾斜</target>
</phrase>
<phrase>
<source>Réinitialiser</source>
<target>重置</target>
</phrase>
<phrase>
<source>Selectionner une image...</source>
<target>选择图像...</target>
</phrase>
<phrase>
<source>Supprimer le nœud le plus proche</source>
<target>删除最近节点</target>
</phrase>
<phrase>
<source>Supprimer un point d&apos;une courbe</source>
<target>从曲线删除点</target>
</phrase>
<phrase>
<source>Symétrique</source>
<target>对称</target>
</phrase>
<phrase>
<source>Séparation de potentiel</source>
<target>电位分隔</target>
</phrase>
<phrase>
<source>Taille</source>
<target>大小</target>
</phrase>
<phrase>
<source>Tension nominale</source>
<target>额定电压</target>
</phrase>
<phrase>
<source>Tolérance pour cette couleur</source>
<target>此颜色的容差</target>
</phrase>
<phrase>
<source>Tous les fichiers (*)</source>
<target>所有文件 (*)</target>
</phrase>
<phrase>
<source>Transformer %1</source>
<target>变换 %1</target>
</phrase>
<phrase>
<source>Transparence non conservée</source>
<target>不保留透明度</target>
</phrase>
<phrase>
<source>un arc</source>
<target>一段弧</target>
</phrase>
<phrase>
<source>un coin</source>
<target>一个角</target>
</phrase>
<phrase>
<source>un point</source>
<target>一个点</target>
</phrase>
<phrase>
<source>une courbe</source>
<target>一条曲线</target>
</phrase>
<phrase>
<source>une extrémité</source>
<target>一个端点</target>
</phrase>
<phrase>
<source>une image</source>
<target>一张图像</target>
<definition>part of a sentence listing the content of a diagram</definition>
</phrase>
<phrase>
<source>Verrouiller la numérotation automatique</source>
<target>锁定自动编号</target>
</phrase>
<phrase>
<source>Verrouiller la position</source>
<target>锁定位置</target>
</phrase>
<phrase>
<source>Verrouillé : modifier la largeur ou la hauteur ajuste l&apos;autre pour conserver les proportions. Cliquer pour déverrouiller.</source>
<target>已锁定:修改宽度或高度会调整另一个以保持比例。单击解锁。</target>
</phrase>
<phrase>
<source>Échec de l&apos;enregistrement</source>
<target>保存失败</target>
</phrase>
<phrase>
<source>Édition des nœuds</source>
<target>节点编辑</target>
</phrase>
<phrase>
<source>armoire</source>
<target>机柜</target>
<definition>cabinet / enclosure</definition>
</phrase>
<phrase>
<source>bobine</source>
<target>线圈</target>
<definition>coil</definition>
</phrase>
<phrase>
<source>borne</source>
<target>端子</target>
<definition>terminal - a connection point on a symbol</definition>
</phrase>
<phrase>
<source>bornier</source>
<target>端子排</target>
<definition>terminal strip</definition>
</phrase>
<phrase>
<source>cable</source>
<target>电缆</target>
<definition>cable</definition>
</phrase>
<phrase>
<source>calibre</source>
<target>额定值</target>
<definition>rating - the current rating of a device</definition>
</phrase>
<phrase>
<source>cartouche</source>
<target>标题栏</target>
<definition>title block - the framed information panel</definition>
</phrase>
<phrase>
<source>collection</source>
<target>符号库</target>
<definition>collection - the symbol library</definition>
</phrase>
<phrase>
<source>conducteur</source>
<target>导线</target>
<definition>conductor - the drawn wire between terminals</definition>
</phrase>
<phrase>
<source>contact</source>
<target>触点</target>
<definition>contact</definition>
</phrase>
<phrase>
<source>contacteur</source>
<target>接触器</target>
<definition>contactor</definition>
</phrase>
<phrase>
<source>courant</source>
<target>电流</target>
<definition>current</definition>
</phrase>
<phrase>
<source>disjoncteur</source>
<target>断路器</target>
<definition>circuit breaker</definition>
</phrase>
<phrase>
<source>dossier</source>
<target>文件夹</target>
<definition>folder</definition>
</phrase>
<phrase>
<source>element</source>
<target>元件</target>
<definition>element - a symbol placed on a sheet</definition>
</phrase>
<phrase>
<source>esclave</source>
<target>从</target>
<definition>slave - the contact block belonging to a master</definition>
</phrase>
<phrase>
<source>fusible</source>
<target>熔断器</target>
<definition>fuse</definition>
</phrase>
<phrase>
<source>grille</source>
<target>网格</target>
<definition>grid</definition>
</phrase>
<phrase>
<source>interrupteur</source>
<target>开关</target>
<definition>switch</definition>
</phrase>
<phrase>
<source>maitre</source>
<target>主</target>
<definition>master - the element a cross-reference points from</definition>
</phrase>
<phrase>
<source>modele</source>
<target>模板</target>
<definition>template</definition>
</phrase>
<phrase>
<source>moteur</source>
<target>电动机</target>
<definition>motor</definition>
</phrase>
<phrase>
<source>neutre</source>
<target>中性线</target>
<definition>neutral</definition>
</phrase>
<phrase>
<source>nomenclature</source>
<target>物料清单</target>
<definition>parts list / bill of materials</definition>
</phrase>
<phrase>
<source>numerotation</source>
<target>编号</target>
<definition>numbering - automatic wire and part numbering</definition>
</phrase>
<phrase>
<source>phase</source>
<target>相</target>
<definition>phase</definition>
</phrase>
<phrase>
<source>potentiel</source>
<target>电位</target>
<definition>potential - conductors electrically joined as one node</definition>
</phrase>
<phrase>
<source>projet</source>
<target>项目</target>
<definition>project - the .qet file holding the sheets</definition>
</phrase>
<phrase>
<source>puissance</source>
<target>功率</target>
<definition>power</definition>
</phrase>
<phrase>
<source>relais</source>
<target>继电器</target>
<definition>relay</definition>
</phrase>
<phrase>
<source>renvoi de folio</source>
<target>图纸交叉引用</target>
<definition>sheet cross-reference</definition>
</phrase>
<phrase>
<source>repere</source>
<target>标识</target>
<definition>designation - the identifying mark on a part</definition>
</phrase>
<phrase>
<source>report de folio</source>
<target>图纸交叉引用</target>
<definition>sheet cross-reference (the arrow symbol)</definition>
</phrase>
<phrase>
<source>schema</source>
<target>原理图</target>
<definition>diagram</definition>
</phrase>
<phrase>
<source>section</source>
<target>截面积</target>
<definition>cross-section - conductor size in mm2</definition>
</phrase>
<phrase>
<source>sommaire</source>
<target>目录</target>
<definition>summary / table of contents</definition>
</phrase>
<phrase>
<source>tension</source>
<target>电压</target>
<definition>voltage</definition>
</phrase>
<phrase>
<source>terre</source>
<target>接地</target>
<definition>earth / ground</definition>
</phrase>
<phrase>
<source>texte</source>
<target>文本</target>
<definition>text</definition>
</phrase>
<phrase>
<source>transformateur</source>
<target>变压器</target>
<definition>transformer</definition>
</phrase>
</QPH>
+1 -1
View File
@@ -1,7 +1,7 @@
#!/bin/bash
#Based on raspberry pi 5 8 Gb Trixie
#sudo apt install git ssh rsync libqt5svg5-dev qt5-qmake qtbase5-dev libkf5widgetsaddons-dev libkf5coreaddons-dev pkgconf libqt5waylandclient5-dev libqt5waylandcompositor5-dev g++ make
#sudo apt install git ssh rsync libqt5svg5-dev qt5-qmake qtbase5-dev libkf5widgetsaddons-dev libkf5coreaddons-dev libsqlite3-dev pkgconf libqt5waylandclient5-dev libqt5waylandcompositor5-dev g++ make
#mkdir -p AppImage/0.100.0/aarch64
# Get GIT sources
#git clone --recursive https://github.com/qelectrotech/qelectrotech-source-mirror.git
@@ -49,6 +49,14 @@ ElementsCollectionModel::ElementsCollectionModel(QObject *parent) :
*/
ElementsCollectionModel::~ElementsCollectionModel()
{
// Without cancel(), the wait below runs the whole queued
// QtConcurrent::map() to completion, so closing this dialog on a
// large collection blocks until every remaining item has been
// processed -- a visible hang on the button pressed precisely to
// stop the work. cancel() drops the not-yet-started items so the
// wait that follows (still needed, so an in-flight item can't
// dereference this object after it's gone) is short.
m_future.cancel();
m_future.waitForFinished();
}
@@ -431,7 +439,7 @@ void ElementsCollectionModel::addLocation(const ElementsLocation& location)
collection_name);
}
}
// ANPASSUNG: Makros und Custom Collection werden hier behandelt!
// Macros and Custom Collection are handled here
else if (location.isCustomCollection() || location.isMacrosCollection()) {
QList <ElementCollectionItem *> child_list;
@@ -647,7 +655,7 @@ QModelIndex ElementsCollectionModel::indexFromLocation(
if (eci->type() == FileElementCollectionItem::Type) {
if (FileElementCollectionItem *feci = static_cast<FileElementCollectionItem *>(eci)) {
// ANPASSUNG: Makro-Prüfung hinzugefügt, damit das Modell den Pfad im Baum findet!
// Macro check added so the model finds the path in the tree
if ( (location.isCommonCollection() && feci->isCommonCollection()) ||
(location.isCompanyCollection() && feci->isCompanyCollection()) ||
(location.isMacrosCollection() && feci->isMacrosCollection()) ||
@@ -162,7 +162,7 @@ QString FileElementCollectionItem::localName()
else if (m_path == QETApp::customElementsDirN())
setText(QObject::tr("Collection utilisateur"));
else if (m_path == macrosPath)
setText(QObject::tr("Makros"));
setText(QObject::tr("Macros"));
else
setText(QObject::tr("Collection inconnue"));
}
+30 -2
View File
@@ -319,10 +319,23 @@ void projectDataBase::addElement(Element *element)
void projectDataBase::removeElement(Element *element)
{
m_content_changed = true;
bool changed = false;
m_remove_element_query.bindValue(":uuid", element->uuid().toString());
if(!m_remove_element_query.exec()) {
qDebug() << "projectDataBase::removeElement remove error : " << m_remove_element_query.lastError();
if (m_remove_element_query.exec()) {
changed = true;
} else {
qDebug() << "projectDataBase::removeElement remove error : " << m_remove_element_query.lastError();
}
m_remove_element_info_query.bindValue(":uuid", element->uuid().toString());
if (m_remove_element_info_query.exec()) {
changed = true;
} else {
qDebug() << "projectDataBase::removeElement remove element_info error : " << m_remove_element_info_query.lastError();
}
if (changed) {
emit dataBaseUpdated();
}
}
@@ -1159,6 +1172,21 @@ void projectDataBase::prepareQuery()
m_remove_element_query = QSqlQuery(m_data_base);
m_remove_element_query.prepare(remove_element);
//REMOVE ELEMENT INFO
//element_info has no ON DELETE CASCADE (foreign keys aren't
//enforced by this connection), so removeElement() must clear it
//explicitly. Without this, the row is orphaned under the removed
//element's uuid, and re-adding an element with that same uuid
//later -- undo of this same removal, or a redo replaying it --
//hits element_info's PRIMARY KEY constraint on element_uuid: the
//element re-add succeeds, but its element_info insert silently
//fails and is lost. removeDiagram()'s cascade already clears this
//table when a whole folio goes, but that does not run for a
//single element removed on its own.
QString remove_element_info("DELETE FROM element_info WHERE element_uuid=:uuid");
m_remove_element_info_query = QSqlQuery(m_data_base);
m_remove_element_info_query.prepare(remove_element_info);
//UPDATE ELEMENT INFO
QString update_str("UPDATE element_info SET ");
for (auto string : QETInformation::elementInfoKeys()) {
+2 -1
View File
@@ -29,7 +29,7 @@ class QETProject;
class Diagram;
class Conductor;
class Terminal;
class sqlite3;
struct sqlite3;
/**
@brief The projectDataBase class
@@ -139,6 +139,7 @@ class projectDataBase : public QObject
QSqlQuery m_insert_elements_query,
m_insert_element_info_query,
m_remove_element_query,
m_remove_element_info_query,
m_update_element_query,
m_insert_diagram_query,
m_remove_diagram_query,
+17 -1
View File
@@ -77,6 +77,23 @@ void PasteDiagramCommand::redo()
{
first_redo = false;
//Resolve a linked master/slave pair pasted together (bugtracker
//#607) before anything below renews their uuids: at this exact
//moment a pasted element's tmp_uuids_link still holds its
//source's original partner uuid, which still equals the
//not-yet-renewed uuid of that partner's own pasted copy if it
//was carried along in the same batch. Scoped to this batch only
//(not a project-wide search), so a pair pasted together links to
//each other and not to an original element left elsewhere that
//happens to still carry that same soon-to-be-replaced uuid. If
//only one half of a linked group was pasted, its link entry
//simply finds no match here and is dropped -- same "leave it
//unlinked" outcome as always.
const QList <Element *> elmts_list = content.m_elements;
for (Element *e : elmts_list) {
e->initLink(elmts_list);
}
//make new uuid for every pasted conductor, because old uuid are
//the uuid of the copied conductor
const QList <Conductor *> all_pasted_conductors = content.conductors();
@@ -85,7 +102,6 @@ void PasteDiagramCommand::redo()
}
//this is the first paste, we do some actions for the new element
const QList <Element *> elmts_list = content.m_elements;
for (Element *e : elmts_list)
{
//make new uuid, because old uuid are the uuid of the copied element
+1 -1
View File
@@ -1477,7 +1477,7 @@ void DiagramView::createTemplateFromSelection()
collection_node.appendChild(collection_elmt);
} else {
qDebug() << "Warnung: Konnte XML-Definition für" << old_type << "nicht laden.";
qDebug() << "Warning: could not load XML definition for" << old_type;
}
}
}
+20
View File
@@ -25,6 +25,8 @@
#include "../../qetapp.h"
#include "../../qetmainwindow.h"
#include "../../recentfiles.h"
#include "../../elementscollectioncache.h"
#include "../../factory/elementpicturefactory.h"
#include "../graphicspart/customelementpart.h"
#include "../elementitemeditor.h"
#include "../styleeditor.h"
@@ -348,6 +350,24 @@ bool QETElementEditor::toLocation(const ElementsLocation &location)
tr("Impossible d'enregistrer l'élément", "message box content"));
return(false);
}
//setXml() just wrote the new drawing to disk, but the preview shown
//in the elements panel comes from two caches keyed by path+uuid that
//nothing here has told about the change: ElementPictureFactory's
//in-memory picture cache and ElementsCollectionCache's on-disk
//SQLite cache (see ElementsLocation::icon()). locationWasSaved()
//(elementscollectionwidget.cpp) re-reads the icon right after this
//call returns, but both caches still hand back the pre-edit pixmap,
//so the panel keeps showing the stale preview until the whole
//collection is reloaded. Drop and rebuild them here.
ElementPictureFactory::instance()->dropCache(location);
if (ElementsCollectionCache *cache = QETApp::collectionCache()) {
if (cache->fetchData(location)) {
cache->cacheName(location.toString(), location.uuid());
cache->cachePixmap(location.toString(), location.uuid());
}
}
return(true);
}
+24 -3
View File
@@ -674,6 +674,27 @@ void ElementsPanelWidget::duplicateDiagram()
bool erase_labels = settings.value(
"diagramcommands/erase-label-on-copy", true).toBool();
// Resolve a linked pair duplicated together against each other
// (bugtracker #607) before the loop below renews their uuids or
// clears their pending links: at this exact moment a copy's
// tmp_uuids_link still holds its source's original partner
// uuid, which still equals the not-yet-renewed uuid of that
// partner's own copy if both were duplicated together. Scoped
// to this diagram's own copies, not a project-wide search, so
// this never links back to the source elements the copies were
// made from -- if only one half of a linked pair is here, its
// link entry simply finds no match and is dropped, same as
// clearPendingLinks() used to do unconditionally for every copy.
QList<Element *> new_elements;
for (QGraphicsItem *item : new_diagram->items()) {
if (Element *elmt = dynamic_cast<Element *>(item)) {
new_elements << elmt;
}
}
for (Element *elmt : new_elements) {
elmt->initLink(new_elements);
}
for (QGraphicsItem *item : new_diagram->items()) {
if (Element *elmt = dynamic_cast<Element *>(item)) {
// The XML round-trip kept the source elements' uuids. Give the
@@ -695,9 +716,9 @@ void ElementsPanelWidget::duplicateDiagram()
new_diagram->restoreText(elmt);
}
// Clear pending links so copies don't link back to
// the source elements via stale UUIDs.
elmt->clearPendingLinks();
// initLink() above already cleared tmp_uuids_link for
// every copy, matched or not -- nothing left here that
// could link back to a stale source uuid.
// Clean up copied element data:
// 1. Slaves always lose label/formula/comment/location
+24
View File
@@ -20,6 +20,7 @@
#include "qeticons.h"
#include "shortcutmanager.h"
#include <cmath>
#include <limits>
#include <QBuffer>
#include <QColorDialog>
@@ -244,10 +245,33 @@ bool QET::attributeIsAReal(
bool ok;
qreal tmp = e.attribute(nom_attribut).toDouble(&ok);
if (!ok) return(false);
// QString::toDouble() sets ok=true for "nan"/"inf"/"-inf" -- these
// parse successfully but are not usable coordinates. A non-finite
// element/terminal position reaches Conductor::shape() during load
// and hangs there at 100% CPU inside QPainterPathStroker::createStroke(),
// confirmed with gdb: not a blocked wait, genuine unbounded computation.
if (!std::isfinite(tmp)) return(false);
if (reel != nullptr) *reel = tmp;
return(true);
}
/**
@brief QET::infoFlagIsTrue
@see the header comment for why this exists rather than a bare
== "true" comparison.
@param value the raw elementInformations string to test
@return true if @p value, trimmed and case-folded, is one of the
truthy spellings this codebase already accepts elsewhere
*/
bool QET::infoFlagIsTrue(const QString &value)
{
const QString v = value.trimmed().toLower();
return v == QLatin1String("true")
|| v == QLatin1String("1")
|| v == QLatin1String("yes")
|| v == QLatin1String("on");
}
/**
@brief QET::ElementsAndConductorsSentence
Permet de composer rapidement la proposition "x elements et y conducteurs"
+16
View File
@@ -161,6 +161,22 @@ namespace QET {
bool orthogonalProjection(const QPointF &, const QLineF &, QPointF * = nullptr);
bool attributeIsAnInteger(const QDomElement &, const QString& , int * = nullptr);
bool attributeIsAReal(const QDomElement &, const QString& , qreal * = nullptr);
/**
Whether an elementInformations flag (auto_num_locked,
potential_isolating, exclude_from_bom, ...) counts as "on".
Case-insensitive and tolerant of surrounding whitespace, and
accepts the same set of truthy spellings ("true", "1", "yes",
"on") that element_nomenclature_view's SQL predicate for
exclude_from_bom already does -- see
projectDataBase::createElementNomenclatureView(). These flags
are only ever written by this app's own checkboxes as literal
"true"/"false" today, but a bare == "true" comparison silently
treats anything else -- "True", "TRUE", a trailing space from
a hand-edited file, a value some other tool wrote -- as off,
with no error and no visible difference from the checkbox
being genuinely unticked (discussion #785).
*/
bool infoFlagIsTrue(const QString &value);
QString ElementsAndConductorsSentence(int elements=0,
int conductors=0,
int indi_texts=0,
@@ -33,6 +33,7 @@
#include <QDomElement>
#include <QtCore/qnumeric.h>
#include <QGraphicsSceneMouseEvent>
#include <QAbstractTextDocumentLayout>
/**
@brief DynamicElementTextItem::DynamicElementTextItem
@@ -732,19 +733,6 @@ void DynamicElementTextItem::paint(QPainter *painter, const QStyleOptionGraphics
{
DiagramTextItem::paint(painter, option, widget);
//Only ever repositions already-existing sibling items here --
//never adds or removes one. paint() runs while QGraphicsScene is
//iterating its item list to draw it, and mutating that list mid
//-iteration (which addResizeHandles()/removeResizeHandles() do,
//through QGraphicsScene::addItem()/removeItem()) crashes. An
//earlier version of this fix called them from here and crashed
//qelectrotech reproducibly on deselecting a text (SIGABRT); see
//refreshResizeHandlesVisibility() for where that now happens
//instead -- itemChange(), Qt's own safe hook for exactly this,
//already used below for this item's own selection.
if (m_left_resize_handle || m_right_resize_handle)
updateResizeHandlesPos();
if (m_frame)
{
painter->save();
@@ -927,11 +915,17 @@ void DynamicElementTextItem::addResizeHandles()
for (QetGraphicsHandlerItem *handle : {m_left_resize_handle, m_right_resize_handle})
{
scene()->addItem(handle);
//Children of this text, not free scene items: Qt then carries
//them along when the parent element moves, rotates or is
//zoomed, and repaints their old and new area in the same
//update as this text. Moving free items from paint() instead
//left green fragments behind (qelectrotech#1002).
handle->setParentItem(this);
handle->setColor(Qt::darkGreen);
handle->setZValue(zValue() + 1);
handle->installSceneEventFilter(this);
}
m_resize_handles_con = connect(document()->documentLayout(), &QAbstractTextDocumentLayout::documentSizeChanged,
this, &DynamicElementTextItem::updateResizeHandlesPos);
updateResizeHandlesPos();
}
@@ -941,6 +935,7 @@ void DynamicElementTextItem::addResizeHandles()
*/
void DynamicElementTextItem::removeResizeHandles()
{
disconnect(m_resize_handles_con);
delete m_left_resize_handle;
delete m_right_resize_handle;
m_left_resize_handle = nullptr;
@@ -973,8 +968,8 @@ void DynamicElementTextItem::updateResizeHandlesPos()
return;
QRectF br = boundingRect();
m_left_resize_handle->setPos(mapToScene(QPointF(br.left(), br.center().y())));
m_right_resize_handle->setPos(mapToScene(QPointF(br.right(), br.center().y())));
m_left_resize_handle->setPos(br.left(), br.center().y());
m_right_resize_handle->setPos(br.right(), br.center().y());
}
/**
@@ -200,6 +200,7 @@ class DynamicElementTextItem : public DiagramTextItem
qreal m_resize_original_width = -1;
qreal m_resize_baseline_width = -1;
qreal m_resize_start_local_x = 0;
QMetaObject::Connection m_resize_handles_con;
};
#endif // DYNAMICELEMENTTEXTITEM_H
+44
View File
@@ -39,7 +39,9 @@
#include "elementtextitemgroup.h"
#include "iostream"
#include <QApplication>
#include <QCollator>
#include <QScreen>
static const QString plcTerminalKeys[] = {
QETInformation::ELMT_PLC_T1,
@@ -209,6 +211,21 @@ void Element::editProperty()
//with the "text" tab of ElementPropertiesWidget,
//the ui freeze, until user press escape key
dialog.setWindowModality(Qt::WindowModal);
// A PLC master carries a 6-column IO table: without an explicit
// size the dialog falls back to its (cramped) sizeHint, so open it
// at three times its natural width instead. The height stays at
// the natural one, and the width never exceeds the screen.
const ElementData data = elementData();
if (data.m_type == ElementData::Master
&& data.m_master_type == ElementData::PLC) {
const QSize natural = dialog.sizeHint();
int width = natural.width() * 3;
if (QScreen *screen = QApplication::primaryScreen())
width = qMin(width, screen->availableGeometry().width());
dialog.resize(width, natural.height());
}
dialog.exec();
}
}
@@ -1369,6 +1386,33 @@ void Element::initLink(QETProject *prj)
tmp_uuids_link.clear();
}
/**
@brief Element::initLink
Overload resolving tmp_uuids_link against @p candidates instead of a
project-wide ElementProvider search -- see the header comment for
why the search has to be scoped this way right after a paste or
folio-duplication XML round-trip, before uuids are renewed.
@param candidates the elements to search for a link partner in
*/
void Element::initLink(const QList<Element *> &candidates)
{
// if nothing to link return now
if (tmp_uuids_link.isEmpty()) return;
for (int i = 0; i < tmp_uuids_link.size(); ++i) {
for (Element *elmt : candidates) {
if (elmt->uuid() == tmp_uuids_link[i].uuid) {
elmt->linkToElement(this);
if (tmp_uuids_link[i].group_index >= 0) {
m_group_index_map[elmt] = tmp_uuids_link[i].group_index;
}
break;
}
}
}
tmp_uuids_link.clear();
}
/**
* @brief Element::linkTypeToString
* \deprecated use instead ElementData::typeToString
+19
View File
@@ -207,6 +207,25 @@ class Element : public QetGraphicsItem
virtual void unlinkAllElements() {}
virtual void unlinkElement(Element *) {}
virtual void initLink(QETProject *);
/**
Resolve tmp_uuids_link against a caller-supplied candidate
list instead of a project-wide search (bugtracker #607).
Used right after an XML round-trip (paste, folio
duplication) and before the pasted/duplicated elements'
uuids are renewed: at that moment a copy's tmp_uuids_link
still holds its source's original partner uuid, which
still matches the not-yet-renewed uuid of that partner's
own copy if it was carried along in the same batch.
Resolving only within @p candidates -- not the whole
project -- is what stops a linked pair pasted together
from matching an original element left elsewhere that
happens to still carry that same soon-to-be-replaced
uuid. If only one half of a linked group is in
@p candidates, its entry finds no match and is dropped,
same as initLink(QETProject *) leaving an unresolvable
link unlinked.
*/
void initLink(const QList<Element *> &candidates);
QList<Element *> linkedElements ();
int groupIndexForElement(Element *elmt) const;
+2 -1
View File
@@ -16,6 +16,7 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "../qetgraphicsitem/terminal.h"
#include "../qet.h"
#include "../qetproject.h"
#include "../conductorautonumerotation.h"
#include "../diagram.h"
@@ -986,7 +987,7 @@ QList<Terminal *> relatedPotentialTerminal (
else if (terminal -> parentElement() -> linkType() & Element::Terminale)
{
// English: Check if the user activated the potential isolation checkbox for this terminal
if (terminal->parentElement()->elementInformations().value(QStringLiteral("potential_isolating")).toString() == QLatin1String("true")) {
if (QET::infoFlagIsTrue(terminal->parentElement()->elementInformations().value(QStringLiteral("potential_isolating")).toString())) {
// English: Potential is isolated. Return an empty list so it does not propagate to the other side.
return QList<Terminal *>();
}
+14 -2
View File
@@ -31,6 +31,7 @@
#include <QMenu>
#include <QPainter>
#include <QPixmap>
#include <QSet>
namespace {
/**
@@ -167,11 +168,22 @@ void ConductorColorToolButton::applyColor(const QColor &color)
}
DiagramContent dc(diagram);
const auto conductors = dc.conductors(DiagramContent::AnyConductor);
if (conductors.isEmpty()) {
const auto selected_conductors = dc.conductors(DiagramContent::AnyConductor);
if (selected_conductors.isEmpty()) {
return;
}
//A wire drawn across a junction is several Conductor objects
//sharing one electrical potential; selecting one segment must
//still recolour the whole potential, the way the F2 dialog's
//"apply to all" already does.
QSet<Conductor *> conductors;
for (Conductor *conductor : selected_conductors)
{
conductors << conductor;
conductors += conductor->relatedPotentialConductors();
}
QUndoCommand *undo = new QUndoCommand(tr("Modifier la couleur de %n conducteur(s)",
"undo caption", conductors.count()));
int changed = 0;
+3 -2
View File
@@ -16,6 +16,7 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "elementinfowidget.h"
#include "../qet.h"
#include <QCheckBox>
#include <QPushButton>
#include "../diagram.h"
@@ -366,12 +367,12 @@ void ElementInfoWidget::updateUi()
// Load the lock status for auto numbering
if (m_element->elementData().m_type == ElementData::Terminal) {
QString lock_value = element_info.value(QStringLiteral("auto_num_locked")).toString();
ui->m_auto_num_locked_cb->setChecked(lock_value == QLatin1String("true"));
ui->m_auto_num_locked_cb->setChecked(QET::infoFlagIsTrue(lock_value));
// English: Load the potential isolating status from the element information mapping
if (m_potential_isolating_cb) {
QString isolating_value = element_info.value(QStringLiteral("potential_isolating")).toString();
m_potential_isolating_cb->setChecked(isolating_value == QLatin1String("true"));
m_potential_isolating_cb->setChecked(QET::infoFlagIsTrue(isolating_value));
}
}
// English: Load the BOM exclusion status from the element information mapping
+29 -1
View File
@@ -539,7 +539,35 @@ void MasterPropertiesWidget::updateUi()
tr("Type"), tr("Adresse"), tr("Fonction"),
tr("Commentaire"), tr("Réf. croisée"), tr("Bornes")
});
m_plc_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
m_plc_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
m_plc_table->horizontalHeader()->setSectionsMovable(true);
m_plc_table->horizontalHeader()->resizeSection(0, 120);
m_plc_table->horizontalHeader()->resizeSection(1, 100);
m_plc_table->horizontalHeader()->resizeSection(2, 150);
m_plc_table->horizontalHeader()->resizeSection(3, 150);
m_plc_table->horizontalHeader()->resizeSection(4, 100);
m_plc_table->horizontalHeader()->resizeSection(5, 120);
// Restore a previously saved column layout, if any
auto *plc_hdr = m_plc_table->horizontalHeader();
QSettings plc_settings;
const QVariant plc_hdr_state = plc_settings.value(
QStringLiteral("masterpropertieswidget/plc-table-header-state"));
if (!plc_hdr_state.isNull())
plc_hdr->restoreState(plc_hdr_state.toByteArray());
// Persist the column layout whenever the user resizes or moves a column
auto save_plc_header_state = [plc_hdr]()
{
QSettings settings;
settings.setValue(QStringLiteral("masterpropertieswidget/plc-table-header-state"),
plc_hdr->saveState());
};
connect(plc_hdr, &QHeaderView::sectionResized,
this, save_plc_header_state);
connect(plc_hdr, &QHeaderView::sectionMoved,
this, save_plc_header_state);
m_plc_table->setSelectionBehavior(QAbstractItemView::SelectItems);
m_plc_table->setSelectionMode(QAbstractItemView::ExtendedSelection);
m_plc_table->setMinimumHeight(200);
+3 -2
View File
@@ -1,5 +1,6 @@
#include "terminalnumberingdialog.h"
#include "ui_terminalnumberingdialog.h"
#include "../qet.h"
#include "../qetproject.h"
#include "../diagram.h"
#include "../qetgraphicsitem/element.h"
@@ -34,7 +35,7 @@ TerminalNumberingDialog::TerminalNumberingDialog(QWidget *parent, QETProject *pr
if (elmt->elementData().m_type == ElementData::Terminal) {
// Ignore locked terminals
DiagramContext info = elmt->elementInformations();
if (info.value(QStringLiteral("auto_num_locked")).toString() == QLatin1String("true")) {
if (QET::infoFlagIsTrue(info.value(QStringLiteral("auto_num_locked")).toString())) {
continue;
}
@@ -158,7 +159,7 @@ QUndoCommand* TerminalNumberingDialog::getUndoCommand(QETProject *project) const
DiagramContext info = elmt->elementInformations();
// Ignore locked terminals (if the user checked a 'lock' property)
if (info.value(QStringLiteral("auto_num_locked")).toString() == QLatin1String("true")) {
if (QET::infoFlagIsTrue(info.value(QStringLiteral("auto_num_locked")).toString())) {
continue;
}