From 1216855cfa5407523e07130cfc4a2256fad20c2f Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Tue, 4 Aug 2026 23:10:18 +0200 Subject: [PATCH 01/19] Fix broken auto-numbering conductor/element/folio selection in project properties connect() used the string-based currentIndexChanged(QString) signal, which was removed from QComboBox in Qt6. Selecting a conductor/element/folio auto-numbering context in the combo box in the project properties dialog never updated the other fields. Switch to currentTextChanged with the modern pointer-to-member connect() syntax, which also catches signal/slot mismatches at compile time. This is still backward compatible with Qt5 (as long as this is needed). --- sources/ui/configpage/projectconfigpages.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sources/ui/configpage/projectconfigpages.cpp b/sources/ui/configpage/projectconfigpages.cpp index e4fcb69ef..c1143cffa 100644 --- a/sources/ui/configpage/projectconfigpages.cpp +++ b/sources/ui/configpage/projectconfigpages.cpp @@ -396,17 +396,17 @@ void ProjectAutoNumConfigPage::buildConnections() //Conductor Tab connect(m_saw_conductor, &SelectAutonumW::applyPressed, this, &ProjectAutoNumConfigPage::saveContextConductor); connect(m_saw_conductor, &SelectAutonumW::removeClicked, this, &ProjectAutoNumConfigPage::removeContextConductor); - connect(m_saw_conductor->contextComboBox(), SIGNAL(currentIndexChanged(QString)), this, SLOT(updateContextConductor(QString))); + connect(m_saw_conductor->contextComboBox(), &QComboBox::currentTextChanged, this, &ProjectAutoNumConfigPage::updateContextConductor); //Element Tab connect(m_saw_element, &SelectAutonumW::applyPressed, this, &ProjectAutoNumConfigPage::saveContextElement); connect(m_saw_element, &SelectAutonumW::removeClicked, this, &ProjectAutoNumConfigPage::removeContextElement); - connect(m_saw_element->contextComboBox(), SIGNAL(currentIndexChanged(QString)), this, SLOT(updateContextElement(QString))); + connect(m_saw_element->contextComboBox(), &QComboBox::currentTextChanged, this, &ProjectAutoNumConfigPage::updateContextElement); //Folio Tab connect(m_saw_folio, &SelectAutonumW::applyPressed, this, &ProjectAutoNumConfigPage::saveContextFolio); connect(m_saw_folio, &SelectAutonumW::removeClicked, this, &ProjectAutoNumConfigPage::removeContextFolio); - connect(m_saw_folio->contextComboBox(), SIGNAL(currentIndexChanged(QString)), this, SLOT(updateContextFolio(QString))); + connect(m_saw_folio->contextComboBox(), &QComboBox::currentTextChanged, this, &ProjectAutoNumConfigPage::updateContextFolio); // Auto Folio Numbering connect (m_faw, SIGNAL (applyPressed()), this, SLOT (applyAutoNum())); From fb51489436b2b2e6cc0f6a083cb4fd3daf9d171d Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Wed, 5 Aug 2026 09:39:15 +0200 Subject: [PATCH 02/19] Fix of previous commit: use textActivated signal instead. --- sources/ui/configpage/projectconfigpages.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/sources/ui/configpage/projectconfigpages.cpp b/sources/ui/configpage/projectconfigpages.cpp index c1143cffa..f12df6866 100644 --- a/sources/ui/configpage/projectconfigpages.cpp +++ b/sources/ui/configpage/projectconfigpages.cpp @@ -396,17 +396,29 @@ void ProjectAutoNumConfigPage::buildConnections() //Conductor Tab connect(m_saw_conductor, &SelectAutonumW::applyPressed, this, &ProjectAutoNumConfigPage::saveContextConductor); connect(m_saw_conductor, &SelectAutonumW::removeClicked, this, &ProjectAutoNumConfigPage::removeContextConductor); - connect(m_saw_conductor->contextComboBox(), &QComboBox::currentTextChanged, this, &ProjectAutoNumConfigPage::updateContextConductor); + #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + connect(m_saw_conductor->contextComboBox(), &QComboBox::textActivated, this, &ProjectAutoNumConfigPage::updateContextConductor); + #else // TODO Qt6 only: remove, textActivated() always available + connect(m_saw_conductor->contextComboBox(), SIGNAL(activated(QString)), this, SLOT(updateContextConductor(QString))); + #endif //Element Tab connect(m_saw_element, &SelectAutonumW::applyPressed, this, &ProjectAutoNumConfigPage::saveContextElement); connect(m_saw_element, &SelectAutonumW::removeClicked, this, &ProjectAutoNumConfigPage::removeContextElement); - connect(m_saw_element->contextComboBox(), &QComboBox::currentTextChanged, this, &ProjectAutoNumConfigPage::updateContextElement); + #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + connect(m_saw_element->contextComboBox(), &QComboBox::textActivated, this, &ProjectAutoNumConfigPage::updateContextElement); + #else // TODO Qt6 only: remove, textActivated() always available + connect(m_saw_element->contextComboBox(), SIGNAL(activated(QString)), this, SLOT(updateContextElement(QString))); + #endif //Folio Tab connect(m_saw_folio, &SelectAutonumW::applyPressed, this, &ProjectAutoNumConfigPage::saveContextFolio); connect(m_saw_folio, &SelectAutonumW::removeClicked, this, &ProjectAutoNumConfigPage::removeContextFolio); - connect(m_saw_folio->contextComboBox(), &QComboBox::currentTextChanged, this, &ProjectAutoNumConfigPage::updateContextFolio); + #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + connect(m_saw_folio->contextComboBox(), &QComboBox::textActivated, this, &ProjectAutoNumConfigPage::updateContextFolio); + #else // TODO Qt6 only: remove, textActivated() always available + connect(m_saw_folio->contextComboBox(), SIGNAL(activated(QString)), this, SLOT(updateContextFolio(QString))); + #endif // Auto Folio Numbering connect (m_faw, SIGNAL (applyPressed()), this, SLOT (applyAutoNum())); From ab61e00cdf85b641584fcc19e516b9c3d766188e Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Wed, 5 Aug 2026 10:29:31 +0200 Subject: [PATCH 03/19] Fix QSignalMapper connects silently broken under Qt6 (using the old string based system). QSignalMapper::mapped(int/QWidget*) was deprecated in Qt 5.15 and removed in Qt6, replaced by mappedInt/mappedWidget/mappedString. What was broken: * the logo-conflict rename dialog * the system tray show/hide toggle * the Window menu * export dialog's per-diagram preview controls Switched to the modern mappedInt/mappedWidget signals with pointer-to-member connect(), guarded for Qt < 5.15 until Qt5 can be dropped. --- sources/exportdialog.cpp | 19 ++++++++++++++----- sources/qetapp.cpp | 7 +++++-- sources/qetdiagrameditor.cpp | 4 ++++ sources/titleblock/templatelogomanager.cpp | 4 ++++ 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/sources/exportdialog.cpp b/sources/exportdialog.cpp index 3298ad44c..b736aa240 100644 --- a/sources/exportdialog.cpp +++ b/sources/exportdialog.cpp @@ -140,12 +140,21 @@ QWidget *ExportDialog::initDiagramsListPart() reset_mapper_ = new QSignalMapper(this); clipboard_mapper_ = new QSignalMapper(this); - connect(preview_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_previewDiagram(int))); - connect(width_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_correctHeight(int))); - connect(height_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_correctWidth(int))); - connect(ratio_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_keepRatioChanged(int))); - connect(reset_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_resetSize(int))); + #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + connect(preview_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_previewDiagram); + connect(width_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_correctHeight); + connect(height_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_correctWidth); + connect(ratio_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_keepRatioChanged); + connect(reset_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_resetSize); + connect(clipboard_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_exportToClipBoard); + #else // TODO Qt6 only: remove, mappedInt() always available + connect(preview_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_previewDiagram(int))); + connect(width_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_correctHeight(int))); + connect(height_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_correctWidth(int))); + connect(ratio_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_keepRatioChanged(int))); + connect(reset_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_resetSize(int))); connect(clipboard_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_exportToClipBoard(int))); + #endif diagrams_list_layout_ = new QGridLayout(); diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index 8545f99e7..26d0b4cd6 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -122,8 +122,11 @@ QETApp::QETApp() : initSplashScreen(); initSystemTray(); - connect(&signal_map, SIGNAL(mapped(QWidget *)), - this, SLOT(invertMainWindowVisibility(QWidget *))); + #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + connect(&signal_map, &QSignalMapper::mappedObject, this, [this](QObject *object) { invertMainWindowVisibility(qobject_cast(object)); }); + #else // TODO Qt6 only: remove, mappedObject() always available + connect(&signal_map, SIGNAL(mapped(QWidget *)), this, SLOT(invertMainWindowVisibility(QWidget *))); + #endif qApp->setQuitOnLastWindowClosed(false); connect(qApp, &QApplication::lastWindowClosed, this, &QETApp::checkRemainingWindows); diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 5b2ba6779..208d36817 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -107,7 +107,11 @@ QETDiagramEditor::QETDiagramEditor(const QStringList &files, QWidget *parent) : m_workspace.setTabsClosable(true); //Set the signal mapper + #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + connect(&windowMapper, &QSignalMapper::mappedObject, this, [this](QObject *object) { activateWidget(qobject_cast(object)); }); + #else // TODO Qt6 only: remove, mappedObject() always available connect(&windowMapper, SIGNAL(mapped(QWidget *)), this, SLOT(activateWidget(QWidget *))); + #endif setWindowTitle(tr("QElectroTech", "window title")); setWindowIcon(QET::Icons::QETLogo); diff --git a/sources/titleblock/templatelogomanager.cpp b/sources/titleblock/templatelogomanager.cpp index 9cd08befb..8b4d04cd4 100644 --- a/sources/titleblock/templatelogomanager.cpp +++ b/sources/titleblock/templatelogomanager.cpp @@ -217,7 +217,11 @@ QString TitleBlockTemplateLogoManager::confirmLogoName(const QString &initial_na connect(replace_button, SIGNAL(clicked()), signal_mapper, SLOT(map())); connect(rename_button, SIGNAL(clicked()), signal_mapper, SLOT(map())); connect(cancel_button, SIGNAL(clicked()), signal_mapper, SLOT(map())); + #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + connect(signal_mapper, &QSignalMapper::mappedInt, rename_dialog, &QDialog::done); + #else // TOD Qt6 only: remove, mappedInt() always available connect(signal_mapper, SIGNAL(mapped(int)), rename_dialog, SLOT(done(int))); + #endif } rd_label -> setText( QString(tr( From ee36073428b6f9a4e37012fa442baea4f01df803 Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Wed, 5 Aug 2026 10:54:31 +0200 Subject: [PATCH 04/19] Fix DiagramView window title not updating (missed rename from 27dcd5e) 27dcd5e renamed BorderTitleBlock::diagramTitleChanged to informationChanged and updated diagram.cpp accordingly, but diagramview.cpp still used the old string-based SIGNAL()/SLOT() macro referencing the removed signal name, which failed silently at runtime instead of at compile time. The diagram/window title never refreshed after title block changes. Observed when going through the warnings. Updated the connect to use informationChanged with modern pointer-to-member syntax, matching diagram.cpp's own connect to the same signal. --- sources/diagramview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index 3d82ca7f4..427ad0634 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -100,7 +100,7 @@ DiagramView::DiagramView(Diagram *diagram, QWidget *parent) : connect(m_diagram, SIGNAL(showDiagram(Diagram*)), this, SIGNAL(showDiagram(Diagram*))); connect(m_diagram, SIGNAL(sceneRectChanged(QRectF)), this, SLOT(adjustSceneRect())); - connect(&(m_diagram -> border_and_titleblock), SIGNAL(diagramTitleChanged(const QString &)), this, SLOT(updateWindowTitle())); + connect(&(m_diagram -> border_and_titleblock), &BorderTitleBlock::informationChanged, this, &DiagramView::updateWindowTitle); connect(diagram, SIGNAL(findElementRequired(ElementsLocation)), this, SIGNAL(findElementRequired(ElementsLocation))); QShortcut *edit_conductor_color_shortcut = new QShortcut(QKeySequence(Qt::Key_F2), this); From 484ab9ed87faaae54535490f0f1027d20104630e Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Wed, 5 Aug 2026 12:17:49 +0200 Subject: [PATCH 05/19] Fix folio auto-num context not applying to the active diagram BorderTitleBlock::slot_setAutoPageNum was removed in 471f876 ("Remove unused signal", 2023-10-17) without noticing autonumberingdockwidget.cpp still referenced it via old-style SIGNAL()/SLOT() macros, which fail silently at runtime instead of producing a compile error. This has remained broken on master ever since; a fix (57572a2, "Fix two broken signal connections") exists on the unmerged qt6-cmake-elevatormind-merged branch but that one only commented the lines out without solving the underlying issue. Removed the dead code entirely and call BorderTitleBlock::importTitleBlock() directly on the active diagram in on_m_folio_cb_activated() instead. The same mechanism is already used elsewhere in the codebase (undo command, new-diagram creation, XML loading) to push TitleBlockProperties into a diagram and trigger a folio numbering recompute via needFolioData(). --- sources/autoNum/ui/autonumberingdockwidget.cpp | 12 +++--------- sources/autoNum/ui/autonumberingdockwidget.h | 2 -- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/sources/autoNum/ui/autonumberingdockwidget.cpp b/sources/autoNum/ui/autonumberingdockwidget.cpp index 664a00e90..a01cc538f 100644 --- a/sources/autoNum/ui/autonumberingdockwidget.cpp +++ b/sources/autoNum/ui/autonumberingdockwidget.cpp @@ -107,10 +107,6 @@ void AutoNumberingDockWidget::setProject(QETProject *project, this,SLOT(folioAutoNumChanged())); disconnect (m_project,SIGNAL(folioAutoNumAdded()), this,SLOT(folioAutoNumChanged())); - disconnect (this, - SIGNAL(folioAutoNumChanged(QString)), - &m_project_view->currentDiagram()->diagram()->border_and_titleblock, - SLOT (slot_setAutoPageNum(QString))); disconnect(m_project, SIGNAL(defaultTitleBlockPropertiesChanged()), this,SLOT(setActive())); @@ -146,10 +142,6 @@ void AutoNumberingDockWidget::setProject(QETProject *project, this,SLOT(folioAutoNumChanged())); connect (m_project,SIGNAL(folioAutoNumAdded()), this,SLOT(folioAutoNumChanged())); - connect (this, - SIGNAL(folioAutoNumChanged(QString)), - &m_project_view->currentDiagram()->diagram()->border_and_titleblock, - SLOT (slot_setAutoPageNum(QString))); connect(m_project, SIGNAL(defaultTitleBlockPropertiesChanged()), this,SLOT(setActive())); @@ -345,7 +337,9 @@ void AutoNumberingDockWidget::on_m_folio_cb_activated(int) { ip.folio = "%id/%total"; m_project->setDefaultTitleBlockProperties(ip); } - emit(folioAutoNumChanged(current_autonum)); + if (m_project_view && m_project_view->currentDiagram()) { + m_project_view->currentDiagram()->diagram()->border_and_titleblock.importTitleBlock(ip); + } refreshValueField(ui->m_folio_cb, ui->m_folio_value_le, AutoNumCategory::Folio); } diff --git a/sources/autoNum/ui/autonumberingdockwidget.h b/sources/autoNum/ui/autonumberingdockwidget.h index cdfb9f08e..0686a2989 100644 --- a/sources/autoNum/ui/autonumberingdockwidget.h +++ b/sources/autoNum/ui/autonumberingdockwidget.h @@ -66,8 +66,6 @@ class AutoNumberingDockWidget : public QDockWidget void on_m_element_value_le_editingFinished(); void on_m_folio_value_le_editingFinished(); - signals: - void folioAutoNumChanged(QString); private: enum class AutoNumCategory { Conductor, Element, Folio }; From 62ad49a6d36a88ef7ba897033b6d22e4ccdb0f19 Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Wed, 5 Aug 2026 23:33:54 +0200 Subject: [PATCH 06/19] Update old fashioned SIGNAL/SLOT to point-to-member. Only simple and clear cases. --- .../autoNum/ui/autonumberingdockwidget.cpp | 50 ++++++----------- sources/configdialog.cpp | 7 ++- sources/diagramview.cpp | 2 +- sources/editor/elementscene.cpp | 17 +++--- sources/editor/elementview.cpp | 4 +- sources/editor/graphicspart/parttext.cpp | 8 +-- .../ui/elementpropertieseditorwidget.cpp | 2 +- sources/elementscategoryeditor.cpp | 6 +-- sources/elementspanelwidget.cpp | 2 +- sources/exportdialog.cpp | 28 +++++----- sources/exportpropertieswidget.cpp | 2 +- sources/projectview.cpp | 14 ++--- sources/qetapp.cpp | 8 +-- sources/qetdiagrameditor.cpp | 53 +++++++------------ sources/qetgraphicsitem/crossrefitem.cpp | 6 +-- sources/qetmainwindow.cpp | 2 +- sources/qetproject.cpp | 2 +- sources/qfilenameedit.cpp | 2 +- sources/qtextorientationspinboxwidget.cpp | 7 ++- sources/richtext/richtexteditor.cpp | 15 +++--- sources/titleblock/dimensionwidget.cpp | 4 +- .../integrationmovetemplateshandler.cpp | 8 +-- sources/titleblock/qettemplateeditor.cpp | 46 ++++++++-------- sources/titleblock/templatecellwidget.cpp | 6 +-- sources/titleblock/templatelogomanager.cpp | 17 +++--- sources/titleblock/templatescollection.cpp | 2 +- sources/titleblock/templateview.cpp | 22 +++----- sources/ui/configpage/configpages.cpp | 4 +- sources/ui/configpage/projectconfigpages.cpp | 28 +++++----- sources/ui/diagramcontextwidget.cpp | 2 +- sources/ui/diagrampropertiesdialog.cpp | 6 +-- .../ui/diagrampropertieseditordockwidget.cpp | 12 ++--- sources/ui/linksingleelementwidget.cpp | 6 +-- sources/ui/masterpropertieswidget.cpp | 12 ++--- sources/ui/projectpropertiesdialog.cpp | 4 +- sources/ui/xrefpropertieswidget.cpp | 4 +- 36 files changed, 182 insertions(+), 238 deletions(-) diff --git a/sources/autoNum/ui/autonumberingdockwidget.cpp b/sources/autoNum/ui/autonumberingdockwidget.cpp index a01cc538f..1681cb57a 100644 --- a/sources/autoNum/ui/autonumberingdockwidget.cpp +++ b/sources/autoNum/ui/autonumberingdockwidget.cpp @@ -86,29 +86,21 @@ void AutoNumberingDockWidget::setProject(QETProject *project, //Disconnect previous project if (m_project && m_project_view) { - //Conductor Signals - disconnect(m_project, SIGNAL(conductorAutoNumChanged()), - this,SLOT(conductorAutoNumChanged())); - disconnect (m_project,SIGNAL(conductorAutoNumRemoved()), - this,SLOT(conductorAutoNumChanged())); - disconnect (m_project,SIGNAL(conductorAutoNumAdded()), - this,SLOT(conductorAutoNumChanged())); - disconnect(m_project_view,SIGNAL(diagramActivated(DiagramView*)), - this,SLOT(setConductorActive(DiagramView*))); - - //Element Signals - disconnect (m_project,SIGNAL(elementAutoNumRemoved(QString)), - this,SLOT(elementAutoNumChanged())); - disconnect (m_project,SIGNAL(elementAutoNumAdded(QString)), - this,SLOT(elementAutoNumChanged())); + disconnect(m_project, &QETProject::conductorAutoNumChanged, this, &AutoNumberingDockWidget::conductorAutoNumChanged); + disconnect(m_project, &QETProject::conductorAutoNumRemoved, this, &AutoNumberingDockWidget::conductorAutoNumChanged); + disconnect(m_project, &QETProject::conductorAutoNumAdded, this, &AutoNumberingDockWidget::conductorAutoNumChanged); + disconnect(m_project_view, &ProjectView::diagramActivated, this, &AutoNumberingDockWidget::setConductorActive); + + //Element Signals + disconnect(m_project, &QETProject::elementAutoNumRemoved, this, &AutoNumberingDockWidget::elementAutoNumChanged); + disconnect(m_project, &QETProject::elementAutoNumAdded, this, &AutoNumberingDockWidget::elementAutoNumChanged); //Folio Signals disconnect (m_project,SIGNAL(folioAutoNumRemoved()), this,SLOT(folioAutoNumChanged())); disconnect (m_project,SIGNAL(folioAutoNumAdded()), this,SLOT(folioAutoNumChanged())); - disconnect(m_project, SIGNAL(defaultTitleBlockPropertiesChanged()), - this,SLOT(setActive())); + disconnect(m_project, &QETProject::defaultTitleBlockPropertiesChanged, this, &AutoNumberingDockWidget::setActive); //Conductor, Element and Folio Signals disconnect(m_project, &QETProject::autoNumContextUpdated, @@ -121,29 +113,21 @@ void AutoNumberingDockWidget::setProject(QETProject *project, m_project_view = projectview; this->setEnabled(true); - //Conductor Signals - connect(m_project, SIGNAL(conductorAutoNumChanged()), - this,SLOT(conductorAutoNumChanged())); - connect(m_project,SIGNAL(conductorAutoNumRemoved()), - this,SLOT(conductorAutoNumChanged())); - connect(m_project,SIGNAL(conductorAutoNumAdded()), - this,SLOT(conductorAutoNumChanged())); - connect(m_project_view,SIGNAL(diagramActivated(DiagramView*)), - this,SLOT(setConductorActive(DiagramView*))); + connect(m_project, &QETProject::conductorAutoNumChanged, this, &AutoNumberingDockWidget::conductorAutoNumChanged); + connect(m_project, &QETProject::conductorAutoNumRemoved, this, &AutoNumberingDockWidget::conductorAutoNumChanged); + connect(m_project, &QETProject::conductorAutoNumAdded, this, &AutoNumberingDockWidget::conductorAutoNumChanged); + connect(m_project_view, &ProjectView::diagramActivated, this, &AutoNumberingDockWidget::setConductorActive); - //Element Signals - connect (m_project,SIGNAL(elementAutoNumRemoved(QString)), - this,SLOT(elementAutoNumChanged())); - connect (m_project,SIGNAL(elementAutoNumAdded(QString)), - this,SLOT(elementAutoNumChanged())); + //Element Signals + connect(m_project, &QETProject::elementAutoNumRemoved, this, &AutoNumberingDockWidget::elementAutoNumChanged); + connect(m_project, &QETProject::elementAutoNumAdded, this, &AutoNumberingDockWidget::elementAutoNumChanged); //Folio Signals connect (m_project,SIGNAL(folioAutoNumRemoved()), this,SLOT(folioAutoNumChanged())); connect (m_project,SIGNAL(folioAutoNumAdded()), this,SLOT(folioAutoNumChanged())); - connect(m_project, SIGNAL(defaultTitleBlockPropertiesChanged()), - this,SLOT(setActive())); + connect(m_project, &QETProject::defaultTitleBlockPropertiesChanged, this, &AutoNumberingDockWidget::setActive); //Conductor, Element and Folio Signals connect(m_project, &QETProject::autoNumContextUpdated, diff --git a/sources/configdialog.cpp b/sources/configdialog.cpp index b737ca7c2..10a0d0e0e 100644 --- a/sources/configdialog.cpp +++ b/sources/configdialog.cpp @@ -74,10 +74,9 @@ ConfigDialog::ConfigDialog(QWidget *parent) : QDialog(parent) { setLayout(dialog_layout); // connexion signaux / slots - connect(buttons, SIGNAL(accepted()), this, SLOT(applyConf())); - connect(buttons, SIGNAL(rejected()), this, SLOT(reject())); - connect(pages_list, SIGNAL(currentRowChanged(int)), - pages_widget, SLOT(setCurrentIndex(int))); + connect(buttons, &QDialogButtonBox::accepted, this, &ConfigDialog::applyConf); + connect(buttons, &QDialogButtonBox::rejected, this, &ConfigDialog::reject); + connect(pages_list, &QListWidget::currentRowChanged, pages_widget, &QStackedWidget::setCurrentIndex); // set maximum a bit smaller than available size = (screen-size - Task-Bar): setMaximumSize((int)(0.94 * MachineInfo::instance()->i_max_available_width()), diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index 427ad0634..1eea4f80e 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -99,7 +99,7 @@ DiagramView::DiagramView(Diagram *diagram, QWidget *parent) : } connect(m_diagram, SIGNAL(showDiagram(Diagram*)), this, SIGNAL(showDiagram(Diagram*))); - connect(m_diagram, SIGNAL(sceneRectChanged(QRectF)), this, SLOT(adjustSceneRect())); + connect(m_diagram, &QGraphicsScene::sceneRectChanged, this, &DiagramView::adjustSceneRect); connect(&(m_diagram -> border_and_titleblock), &BorderTitleBlock::informationChanged, this, &DiagramView::updateWindowTitle); connect(diagram, SIGNAL(findElementRequired(ElementsLocation)), this, SIGNAL(findElementRequired(ElementsLocation))); diff --git a/sources/editor/elementscene.cpp b/sources/editor/elementscene.cpp index a2c8146d3..1692e2dbb 100644 --- a/sources/editor/elementscene.cpp +++ b/sources/editor/elementscene.cpp @@ -69,10 +69,8 @@ ElementScene::ElementScene(QETElementEditor *editor, QObject *parent) : initPasteArea(); m_undo_stack.setClean(); m_decorator_lock = new QMutex(); - connect(&m_undo_stack, SIGNAL(indexChanged(int)), - this, SLOT(managePrimitivesGroups())); - connect(this, SIGNAL(selectionChanged()), - this, SLOT(managePrimitivesGroups())); + connect(&m_undo_stack, &QUndoStack::indexChanged, this, &ElementScene::managePrimitivesGroups); + connect(this, &ElementScene::selectionChanged, this, &ElementScene::managePrimitivesGroups); } /** @@ -102,8 +100,7 @@ void ElementScene::setElementData(ElementData data) ElementScene::~ElementScene() { //Disconnect to avoid crash, see bug report N° 122. - disconnect(&m_undo_stack, SIGNAL(indexChanged(int)), - this, SLOT(managePrimitivesGroups())); + disconnect(&m_undo_stack, &QUndoStack::indexChanged, this, &ElementScene::managePrimitivesGroups); delete m_decorator_lock; if (m_event_interface) @@ -907,8 +904,8 @@ void ElementScene::slot_editAuthorInformations() QDialogButtonBox::Ok | QDialogButtonBox::Cancel); dialog_layout -> addWidget(dialog_buttons); - connect(dialog_buttons, SIGNAL(accepted()),&dialog_author, SLOT(accept())); - connect(dialog_buttons, SIGNAL(rejected()),&dialog_author, SLOT(reject())); + connect(dialog_buttons, &QDialogButtonBox::accepted, &dialog_author, &QDialog::accept); + connect(dialog_buttons, &QDialogButtonBox::rejected, &dialog_author, &QDialog::reject); // start the dialogue // lance le dialogue @@ -1399,9 +1396,7 @@ void ElementScene::managePrimitivesGroups() if (!m_decorator) { m_decorator = new ElementPrimitiveDecorator(); - connect(m_decorator, - SIGNAL(actionFinished(ElementEditionCommand*)), - this, SLOT(stackAction(ElementEditionCommand *))); + connect(m_decorator, &ElementPrimitiveDecorator::actionFinished, this, &ElementScene::stackAction); addItem(m_decorator); m_decorator -> hide(); } diff --git a/sources/editor/elementview.cpp b/sources/editor/elementview.cpp index a2cc8af58..fe7d515b0 100644 --- a/sources/editor/elementview.cpp +++ b/sources/editor/elementview.cpp @@ -37,8 +37,8 @@ ElementView::ElementView(ElementScene *scene, QWidget *parent) : setResizeAnchor(QGraphicsView::AnchorUnderMouse); setTransformationAnchor(QGraphicsView::AnchorUnderMouse); zoomReset(); - connect(m_scene, SIGNAL(pasteAreaDefined(const QRectF &)), this, SLOT(pasteAreaDefined(const QRectF &))); - connect(m_scene, SIGNAL(needZoomFit()), this, SLOT(zoomFit())); + connect(m_scene, &ElementScene::pasteAreaDefined, this, &ElementView::pasteAreaDefined); + connect(m_scene, &ElementScene::needZoomFit, this, &ElementView::zoomFit); } /// Destructeur diff --git a/sources/editor/graphicspart/parttext.cpp b/sources/editor/graphicspart/parttext.cpp index 7f4112d86..2154603f4 100644 --- a/sources/editor/graphicspart/parttext.cpp +++ b/sources/editor/graphicspart/parttext.cpp @@ -50,10 +50,10 @@ PartText::PartText(QETElementEditor *editor, QGraphicsItem *parent) : adjustItemPosition(1); // adjust textfield position after line additions/deletions - connect(document(), - SIGNAL(blockCountChanged(int)), - this, - SLOT(adjustItemPosition(int))); + connect(document(), + &QTextDocument::blockCountChanged, + this, + &PartText::adjustItemPosition); connect(document(), SIGNAL(contentsChanged()), this, diff --git a/sources/editor/ui/elementpropertieseditorwidget.cpp b/sources/editor/ui/elementpropertieseditorwidget.cpp index 4500a1734..b5fbdc2bc 100644 --- a/sources/editor/ui/elementpropertieseditorwidget.cpp +++ b/sources/editor/ui/elementpropertieseditorwidget.cpp @@ -222,7 +222,7 @@ void ElementPropertiesEditorWidget::setUpInterface() ui->m_tree->setItemDelegate(new EditorDelegate(this)); // NEU: Checkbox mit der Zahlenbox verbinden (Aktivieren/Deaktivieren) - connect(ui->max_slaves_checkbox, SIGNAL(toggled(bool)), ui->max_slaves_spinbox, SLOT(setEnabled(bool))); + connect(ui->max_slaves_checkbox, &QCheckBox::toggled, ui->max_slaves_spinbox, &QWidget::setEnabled); connect(ui->max_slaves_spinbox, QOverload::of(&QSpinBox::valueChanged), [this](int) { if (ui->m_slave_groups_checkbox->isChecked()) { populateSlaveGroupsTable(); diff --git a/sources/elementscategoryeditor.cpp b/sources/elementscategoryeditor.cpp index 1a3f223a5..600b7e28e 100644 --- a/sources/elementscategoryeditor.cpp +++ b/sources/elementscategoryeditor.cpp @@ -58,14 +58,14 @@ ElementsCategoryEditor::ElementsCategoryEditor(const ElementsLocation &location, if (m_edit_mode) { setWindowTitle(tr("Éditer une catégorie", "window title")); - connect(m_buttons, SIGNAL(accepted()), this, SLOT(acceptUpdate())); + connect(m_buttons, &QDialogButtonBox::accepted, this, &ElementsCategoryEditor::acceptUpdate); m_names_list -> setNames(m_location.nameList()); m_file_line_edit -> setText(m_location.fileSystemPath()); m_file_line_edit -> setReadOnly(true); } else { setWindowTitle(tr("Créer une nouvelle catégorie", "window title")); - connect(m_buttons, SIGNAL(accepted()), this, SLOT(acceptCreation())); + connect(m_buttons, &QDialogButtonBox::accepted, this, &ElementsCategoryEditor::acceptCreation); NamesList cat_names; cat_names.addName(QLocale::system().name().left(2), tr("Nom de la nouvelle catégorie", "default name when creating a new category")); @@ -114,7 +114,7 @@ void ElementsCategoryEditor::setUpWidget() m_file_line_edit = new QFileNameEdit(); m_buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - connect(m_buttons, SIGNAL(rejected()), this, SLOT(reject())); + connect(m_buttons, &QDialogButtonBox::rejected, this, &ElementsCategoryEditor::reject); QHBoxLayout *internal_name_layout = new QHBoxLayout(); internal_name_layout -> addWidget(m_file_name); diff --git a/sources/elementspanelwidget.cpp b/sources/elementspanelwidget.cpp index 7baf0afbe..10d07d45e 100644 --- a/sources/elementspanelwidget.cpp +++ b/sources/elementspanelwidget.cpp @@ -117,7 +117,7 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) { connect(filter_textfield, SIGNAL(textChanged(const QString &)), this, SLOT(filterEdited(const QString &))); connect(elements_panel, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(updateButtons())); - connect(elements_panel, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(handleContextMenu(const QPoint &))); + connect(elements_panel, &ElementsPanel::customContextMenuRequested, this, &ElementsPanelWidget::handleContextMenu); connect( elements_panel, SIGNAL(requestForTitleBlockTemplate(const TitleBlockTemplateLocation &)), diff --git a/sources/exportdialog.cpp b/sources/exportdialog.cpp index b736aa240..860b6ce6d 100644 --- a/sources/exportdialog.cpp +++ b/sources/exportdialog.cpp @@ -99,9 +99,9 @@ ExportDialog::ExportDialog( // connexions signaux/slots connect(epw, SIGNAL(formatChanged()), this, SLOT(slot_changeFilesExtension())); - connect(epw, SIGNAL(exportedAreaChanged()), this, SLOT(slot_changeUseBorder())); - connect(buttons, SIGNAL(accepted()), this, SLOT(slot_export())); - connect(buttons, SIGNAL(rejected()), this, SLOT(reject())); + connect(epw, &ExportPropertiesWidget::exportedAreaChanged, this, &ExportDialog::slot_changeUseBorder); + connect(buttons, &QDialogButtonBox::accepted, this, &ExportDialog::slot_export); + connect(buttons, &QDialogButtonBox::rejected, this, &ExportDialog::reject); // ajustement des extensions des fichiers slot_changeFilesExtension(true); @@ -140,21 +140,21 @@ QWidget *ExportDialog::initDiagramsListPart() reset_mapper_ = new QSignalMapper(this); clipboard_mapper_ = new QSignalMapper(this); - #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - connect(preview_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_previewDiagram); - connect(width_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_correctHeight); - connect(height_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_correctWidth); - connect(ratio_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_keepRatioChanged); - connect(reset_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_resetSize); - connect(clipboard_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_exportToClipBoard); - #else // TODO Qt6 only: remove, mappedInt() always available +#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) // TODO Qt6 only: remove, mappedInt() always available connect(preview_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_previewDiagram(int))); connect(width_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_correctHeight(int))); connect(height_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_correctWidth(int))); connect(ratio_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_keepRatioChanged(int))); connect(reset_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_resetSize(int))); connect(clipboard_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_exportToClipBoard(int))); - #endif +#else + connect(preview_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_previewDiagram); + connect(width_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_correctHeight); + connect(height_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_correctWidth); + connect(ratio_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_keepRatioChanged); + connect(reset_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_resetSize); + connect(clipboard_mapper_, &QSignalMapper::mappedInt, this, &ExportDialog::slot_exportToClipBoard); +#endif diagrams_list_layout_ = new QGridLayout(); @@ -174,7 +174,7 @@ QWidget *ExportDialog::initDiagramsListPart() diagrams_list_layout_ -> addLayout(diagram_line -> sizeLayout(), line_count, 3); // si on decoche tous les schemas, on desactive le bouton "Exporter" - connect(diagram_line -> must_export, SIGNAL(toggled(bool)), this, SLOT(slot_checkDiagramsCount())); + connect(diagram_line -> must_export, &QCheckBox::toggled, this, &ExportDialog::slot_checkDiagramsCount); // mappings et signaux pour la gestion des dimensions du schema width_mapper_ -> setMapping(diagram_line -> width, line_count); @@ -939,7 +939,7 @@ void ExportDialog::slot_previewDiagram(int diagram_id) { QGraphicsView *preview_view = new QGraphicsView(preview_scene); preview_view -> setDragMode(QGraphicsView::ScrollHandDrag); QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok); - connect(buttons, SIGNAL(accepted()), &preview_dialog, SLOT(accept())); + connect(buttons, &QDialogButtonBox::accepted, &preview_dialog, &QDialog::accept); QVBoxLayout *vboxlayout1 = new QVBoxLayout(); vboxlayout1 -> addWidget(preview_view); diff --git a/sources/exportpropertieswidget.cpp b/sources/exportpropertieswidget.cpp index aaa0966d0..b31dd3813 100644 --- a/sources/exportpropertieswidget.cpp +++ b/sources/exportpropertieswidget.cpp @@ -230,7 +230,7 @@ void ExportPropertiesWidget::build() setTabOrder(draw_colored_conductors, draw_bg_transparent); // connexion du bouton permettant le choix du repertoire - connect(button_browse, SIGNAL(released()), this, SLOT(slot_chooseADirectory())); + connect(button_browse, &QPushButton::released, this, &ExportPropertiesWidget::slot_chooseADirectory); // emission de signaux lors du changement de format et lors du changement de zone exportee connect(format, SIGNAL(currentIndexChanged(int)), this, SIGNAL(formatChanged())); diff --git a/sources/projectview.cpp b/sources/projectview.cpp index 2978d9745..4fee66bb6 100644 --- a/sources/projectview.cpp +++ b/sources/projectview.cpp @@ -763,8 +763,8 @@ int ProjectView::cleanProject() clean_dialog_layout -> addWidget(buttons); clean_dialog.setLayout(clean_dialog_layout); - connect(buttons, SIGNAL(accepted()), &clean_dialog, SLOT(accept())); - connect(buttons, SIGNAL(rejected()), &clean_dialog, SLOT(reject())); + connect(buttons, &QDialogButtonBox::accepted, &clean_dialog, &QDialog::accept); + connect(buttons, &QDialogButtonBox::rejected, &clean_dialog, &QDialog::reject); int clean_count = 0; if (clean_dialog.exec() == QDialog::Accepted) @@ -888,9 +888,9 @@ void ProjectView::initWidgets() m_tab -> setCornerWidget(tabwidgetLeft, Qt::TopLeftCorner); // manage signals - connect(m_tab, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); - connect(m_tab, SIGNAL(tabBarDoubleClicked(int)), this, SLOT(tabDoubleClicked(int))); - connect(m_tab->tabBar(), SIGNAL(tabMoved(int,int)), this, SLOT(tabMoved(int,int)), Qt::QueuedConnection); + connect(m_tab, &QTabWidget::currentChanged, this, &ProjectView::tabChanged); + connect(m_tab, &QTabWidget::tabBarDoubleClicked, this, &ProjectView::tabDoubleClicked); + connect(m_tab->tabBar(), &QTabBar::tabMoved, this, &ProjectView::tabMoved, Qt::QueuedConnection); fallback_widget_ -> setVisible(false); m_tab -> setVisible(false); @@ -1119,9 +1119,9 @@ void ProjectView::setDiagramPosition(Diagram *diagram, int new_position) if (current_position < 0) return; - disconnect(m_tab->tabBar(), SIGNAL(tabMoved(int,int)), this, SLOT(tabMoved(int,int))); + disconnect(m_tab->tabBar(), &QTabBar::tabMoved, this, &ProjectView::tabMoved); m_tab->tabBar()->moveTab(current_position, new_position); - connect(m_tab->tabBar(), SIGNAL(tabMoved(int,int)), this, SLOT(tabMoved(int,int)), Qt::QueuedConnection); + connect(m_tab->tabBar(), &QTabBar::tabMoved, this, &ProjectView::tabMoved, Qt::QueuedConnection); rebuildDiagramsMap(); diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index 26d0b4cd6..7a7912fa7 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -122,11 +122,11 @@ QETApp::QETApp() : initSplashScreen(); initSystemTray(); - #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - connect(&signal_map, &QSignalMapper::mappedObject, this, [this](QObject *object) { invertMainWindowVisibility(qobject_cast(object)); }); - #else // TODO Qt6 only: remove, mappedObject() always available +#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) // TODO Qt6 only: remove, mappedObject() always available connect(&signal_map, SIGNAL(mapped(QWidget *)), this, SLOT(invertMainWindowVisibility(QWidget *))); - #endif +#else + connect(&signal_map, &QSignalMapper::mappedObject, this, [this](QObject *object) { invertMainWindowVisibility(qobject_cast(object)); }); +#endif qApp->setQuitOnLastWindowClosed(false); connect(qApp, &QApplication::lastWindowClosed, this, &QETApp::checkRemainingWindows); diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 208d36817..68d5bdd3b 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -107,11 +107,11 @@ QETDiagramEditor::QETDiagramEditor(const QStringList &files, QWidget *parent) : m_workspace.setTabsClosable(true); //Set the signal mapper - #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - connect(&windowMapper, &QSignalMapper::mappedObject, this, [this](QObject *object) { activateWidget(qobject_cast(object)); }); - #else // TODO Qt6 only: remove, mappedObject() always available +#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) // TODO Qt6 only: remove, mappedObject() always available connect(&windowMapper, SIGNAL(mapped(QWidget *)), this, SLOT(activateWidget(QWidget *))); - #endif +#else + connect(&windowMapper, &QSignalMapper::mappedObject, this, [this](QObject *object) { activateWidget(qobject_cast(object)); }); +#endif setWindowTitle(tr("QElectroTech", "window title")); setWindowIcon(QET::Icons::QETLogo); @@ -133,14 +133,8 @@ QETDiagramEditor::QETDiagramEditor(const QStringList &files, QWidget *parent) : setMinimumSize(QSize(500, 350)); setWindowState(Qt::WindowMaximized); - connect (&m_workspace, - SIGNAL(subWindowActivated(QMdiSubWindow *)), - this, - SLOT(subWindowActivated(QMdiSubWindow*))); - connect (QApplication::clipboard(), - SIGNAL(dataChanged()), - this, - SLOT(slot_updatePasteAction())); + connect(&m_workspace, &QMdiArea::subWindowActivated, this, &QETDiagramEditor::subWindowActivated); + connect(QApplication::clipboard(), &QClipboard::dataChanged, this, &QETDiagramEditor::slot_updatePasteAction); readSettings(); show(); @@ -188,16 +182,16 @@ void QETDiagramEditor::setUpElementsPanel() connect(pa, SIGNAL(requestForProject (QETProject *)), this, SLOT(activateProject(QETProject *))); connect(pa, SIGNAL(requestForProjectClosing (QETProject *)), this, SLOT(closeProject(QETProject *))); connect(pa, SIGNAL(requestForProjectPropertiesEdition (QETProject *)), this, SLOT(editProjectProperties(QETProject *))); - connect(pa, SIGNAL(requestForNewDiagram (QETProject *)), this, SLOT(addDiagramToProject(QETProject *))); + connect(pa, &ElementsPanelWidget::requestForNewDiagram, this, &QETDiagramEditor::addDiagramToProject); connect(pa, SIGNAL(requestForDiagramPropertiesEdition (Diagram *)), this, SLOT(editDiagramProperties(Diagram *))); - connect(pa, SIGNAL(requestForDiagramsDeletion (const QList &)), this, SLOT(removeDiagrams(const QList &))); - connect(pa, SIGNAL(requestForDiagramMoveUp (const QList &)), this, SLOT(moveDiagramUp(const QList&))); - connect(pa, SIGNAL(requestForDiagramMoveDown (const QList &)), this, SLOT(moveDiagramDown(const QList&))); - connect(pa, SIGNAL(requestForDiagramMoveUpTop (const QList &)), this, SLOT(moveDiagramUpTop(const QList&))); - connect(pa, SIGNAL(requestForDiagramMoveUpx10 (const QList &)), this, SLOT(moveDiagramUpx10(const QList&))); - connect(pa, SIGNAL(requestForDiagramMoveDownx10 (const QList &)), this, SLOT(moveDiagramDownx10(const QList&))); - connect(pa, SIGNAL(requestForDiagramMoveUpx100 (const QList &)), this, SLOT(moveDiagramUpx100(const QList&))); - connect(pa, SIGNAL(requestForDiagramMoveDownx100 (const QList &)), this, SLOT(moveDiagramDownx100(const QList&))); + connect(pa, &ElementsPanelWidget::requestForDiagramsDeletion, this, &QETDiagramEditor::removeDiagrams); + connect(pa, &ElementsPanelWidget::requestForDiagramMoveUp, this, &QETDiagramEditor::moveDiagramUp); + connect(pa, &ElementsPanelWidget::requestForDiagramMoveDown, this, &QETDiagramEditor::moveDiagramDown); + connect(pa, &ElementsPanelWidget::requestForDiagramMoveUpTop, this, &QETDiagramEditor::moveDiagramUpTop); + connect(pa, &ElementsPanelWidget::requestForDiagramMoveUpx10, this, &QETDiagramEditor::moveDiagramUpx10); + connect(pa, &ElementsPanelWidget::requestForDiagramMoveDownx10, this, &QETDiagramEditor::moveDiagramDownx10); + connect(pa, &ElementsPanelWidget::requestForDiagramMoveUpx100, this, &QETDiagramEditor::moveDiagramUpx100); + connect(pa, &ElementsPanelWidget::requestForDiagramMoveDownx100, this, &QETDiagramEditor::moveDiagramDownx100); } /** @@ -850,8 +844,7 @@ void QETDiagramEditor::setUpMenu() // File menu QMenu *recentfile = menu_fichier -> addMenu(QET::Icons::DocumentOpenRecent, tr("&Récemment ouverts")); recentfile->addActions(QETApp::projectsRecentFiles()->menu()->actions()); - connect(QETApp::projectsRecentFiles(), SIGNAL(fileOpeningRequested(const QString &)), - this, SLOT(openRecentFile(const QString &))); + connect(QETApp::projectsRecentFiles(), &RecentFiles::fileOpeningRequested, this, &QETDiagramEditor::openRecentFile); menu_fichier -> addActions(m_file_actions_group.actions()); menu_fichier -> addSeparator(); //menu_fichier -> addAction(import_diagram); @@ -1928,15 +1921,12 @@ void QETDiagramEditor::addProjectView(ProjectView *project_view) diagramWasAdded(dv); //Manage the close event of project - connect(project_view, SIGNAL(projectClosed(ProjectView*)), - this, SLOT(projectWasClosed(ProjectView *))); + connect(project_view, &ProjectView::projectClosed, this, &QETDiagramEditor::projectWasClosed); //Manage the adding of diagram - connect(project_view, SIGNAL(diagramAdded(DiagramView *)), - this, SLOT(diagramWasAdded(DiagramView *))); + connect(project_view, &ProjectView::diagramAdded, this, &QETDiagramEditor::diagramWasAdded); if (QETProject *project = project_view -> project()) - connect(project, SIGNAL(readOnlyChanged(QETProject *, bool)), - this, SLOT(slot_updateActions())); + connect(project, &QETProject::readOnlyChanged, this, &QETDiagramEditor::slot_updateActions); //Manage request for edit or find element and titleblock connect (project_view, &ProjectView::findElementRequired, @@ -2510,10 +2500,7 @@ void QETDiagramEditor::diagramWasAdded(DiagramView *dv) this, &QETDiagramEditor::selectionChanged, Qt::DirectConnection); - connect(dv, - SIGNAL(modeChanged()), - this, - SLOT(slot_updateModeActions())); + connect(dv, &DiagramView::modeChanged, this, &QETDiagramEditor::slot_updateModeActions); } /** diff --git a/sources/qetgraphicsitem/crossrefitem.cpp b/sources/qetgraphicsitem/crossrefitem.cpp index 4f00b6b53..847342238 100644 --- a/sources/qetgraphicsitem/crossrefitem.cpp +++ b/sources/qetgraphicsitem/crossrefitem.cpp @@ -113,10 +113,8 @@ void CrossRefItem::setUpConnection() set=true; else if(m_properties.snapTo() == XRefProperties::Bottom && !m_text && !m_group) //Snap to bottom of element and parent is the element itself { - m_update_connection << connect(m_element, SIGNAL(yChanged()), - this, SLOT(autoPos())); - m_update_connection << connect(m_element, SIGNAL(rotationChanged()), - this, SLOT(autoPos())); + m_update_connection << connect(m_element, &Element::yChanged, this, &CrossRefItem::autoPos); + m_update_connection << connect(m_element, &Element::rotationChanged, this, &CrossRefItem::autoPos); set=true; } diff --git a/sources/qetmainwindow.cpp b/sources/qetmainwindow.cpp index 6061e99d8..58e17713b 100644 --- a/sources/qetmainwindow.cpp +++ b/sources/qetmainwindow.cpp @@ -146,7 +146,7 @@ void QETMainWindow::initCommonMenus() settings_menu_ = new QMenu(tr("&Configuration", "window menu"), this); settings_menu_ -> addAction(fullscreen_action_); settings_menu_ -> addAction(configure_action_); - connect(settings_menu_, SIGNAL(aboutToShow()), this, SLOT(checkToolbarsmenu())); + connect(settings_menu_, &QMenu::aboutToShow, this, &QETMainWindow::checkToolbarsmenu); help_menu_ = new QMenu(tr("&Aide", "window menu"), this); help_menu_ -> addAction(whatsthis_action_); diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index 9b115458d..1f323cc95 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -199,7 +199,7 @@ void QETProject::init() connect(&m_titleblocks_collection, &TitleBlockTemplatesCollection::aboutToRemove, this, &QETProject::removeDiagramsTitleBlockTemplate); m_undo_stack = new QUndoStack(this); - connect(m_undo_stack, SIGNAL(cleanChanged(bool)), this, SLOT(undoStackChanged(bool))); + connect(m_undo_stack, &QUndoStack::cleanChanged, this, &QETProject::undoStackChanged); m_save_backup_timer.setInterval(BACKUP_INTERVAL); connect(&m_save_backup_timer, &QTimer::timeout, this, &QETProject::writeBackup); diff --git a/sources/qfilenameedit.cpp b/sources/qfilenameedit.cpp index d81a86344..38bfa28c6 100644 --- a/sources/qfilenameedit.cpp +++ b/sources/qfilenameedit.cpp @@ -82,7 +82,7 @@ void QFileNameEdit::init() "tooltip content when editing a filename" ) ); - connect(validator_, SIGNAL(validationFailed()), this, SLOT(validationFailed())); + connect(validator_, &QETRegExpValidator::validationFailed, this, &QFileNameEdit::validationFailed); } /** diff --git a/sources/qtextorientationspinboxwidget.cpp b/sources/qtextorientationspinboxwidget.cpp index 0ca18d56b..14eefbb17 100644 --- a/sources/qtextorientationspinboxwidget.cpp +++ b/sources/qtextorientationspinboxwidget.cpp @@ -122,9 +122,9 @@ void QTextOrientationSpinBoxWidget::build() orientation_widget_, SLOT(setOrientation(double))); connect(orientation_widget_, - SIGNAL(orientationChanged(double)), + &QTextOrientationWidget::orientationChanged, spin_box_, - SLOT(setValue(double))); + &QDoubleSpinBox::setValue); // cliquer sur un des carres du QTextOrientationWidget revient a finir une saisie dans le SpinBox connect(orientation_widget_, @@ -134,8 +134,7 @@ void QTextOrientationSpinBoxWidget::build() // lorsque l'utilisateur a change l'orientation, // on emet un signal avec la valeur de la nouvelle orientation - connect(spin_box_, SIGNAL(editingFinished()), - this, SLOT(emitChangeSignals())); + connect(spin_box_, &QDoubleSpinBox::editingFinished, this, &QTextOrientationSpinBoxWidget::emitChangeSignals); // dispose les widgets : le QTextOrientationWidget a gauche, le SpinBox a droite QHBoxLayout *main_layout = new QHBoxLayout(); diff --git a/sources/richtext/richtexteditor.cpp b/sources/richtext/richtexteditor.cpp index 20afb4cc0..41515d02b 100644 --- a/sources/richtext/richtexteditor.cpp +++ b/sources/richtext/richtexteditor.cpp @@ -540,8 +540,7 @@ RichTextEditorToolBar::RichTextEditorToolBar(RichTextEditor *editor, addSeparator(); // Text color button - connect(m_color_action, SIGNAL(colorChanged(QColor)), - this, SLOT(colorChanged(QColor))); + connect(m_color_action, &ColorAction::colorChanged, this, &RichTextEditorToolBar::colorChanged); addAction(m_color_action); @@ -550,8 +549,7 @@ RichTextEditorToolBar::RichTextEditorToolBar(RichTextEditor *editor, QIcon(":/ico/32x32/simplifyrichtext.png"), tr("Simplify Rich Text"), editor, SLOT(setSimplifyRichText(bool)),this); m_simplify_richtext_action->setChecked(editor->simplifyRichText()); - connect(m_editor, SIGNAL(simplifyRichTextChanged(bool)), - m_simplify_richtext_action, SLOT(setChecked(bool))); + connect(m_editor, &RichTextEditor::simplifyRichTextChanged, m_simplify_richtext_action, &QAction::setChecked); addAction(m_simplify_richtext_action); connect(editor, SIGNAL(textChanged()), this, SLOT(updateActions())); @@ -779,7 +777,7 @@ RichTextEditorDialog::RichTextEditorDialog(QWidget *parent) : m_text_edit->setAcceptRichText(false); connect(m_editor, SIGNAL(textChanged()), this, SLOT(richTextChanged())); - connect(m_editor, SIGNAL(simplifyRichTextChanged(bool)), this, SLOT(richTextChanged())); + connect(m_editor, &RichTextEditor::simplifyRichTextChanged, this, &RichTextEditorDialog::richTextChanged); connect(m_text_edit, SIGNAL(textChanged()), this, SLOT(sourceChanged())); // The toolbar needs to be created after the RichTextEditor @@ -798,16 +796,15 @@ RichTextEditorDialog::RichTextEditorDialog(QWidget *parent) : m_tab_widget->setTabPosition(QTabWidget::South); m_tab_widget->addTab(rich_edit, tr("Rich Text")); m_tab_widget->addTab(plain_edit, tr("Source")); - connect(m_tab_widget, SIGNAL(currentChanged(int)), - SLOT(tabIndexChanged(int))); + connect(m_tab_widget, &QTabWidget::currentChanged, this, &RichTextEditorDialog::tabIndexChanged); QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal); QPushButton *ok_button = buttonBox->button(QDialogButtonBox::Ok); ok_button->setText(tr("&OK")); ok_button->setDefault(true); buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("&Cancel")); - connect(buttonBox, SIGNAL(accepted()), this, SLOT(on_buttonBox_accepted())); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); + connect(buttonBox, &QDialogButtonBox::accepted, this, &RichTextEditorDialog::on_buttonBox_accepted); + connect(buttonBox, &QDialogButtonBox::rejected, this, &RichTextEditorDialog::reject); QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(m_tab_widget); diff --git a/sources/titleblock/dimensionwidget.cpp b/sources/titleblock/dimensionwidget.cpp index 4d9a154fd..62d20df56 100644 --- a/sources/titleblock/dimensionwidget.cpp +++ b/sources/titleblock/dimensionwidget.cpp @@ -150,8 +150,8 @@ void TitleBlockDimensionWidget::initWidgets() // buttons, for the user to validate its input buttons_ = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - connect(buttons_, SIGNAL(accepted()), this, SLOT(accept())); - connect(buttons_, SIGNAL(rejected()), this, SLOT(reject())); + connect(buttons_, &QDialogButtonBox::accepted, this, &TitleBlockDimensionWidget::accept); + connect(buttons_, &QDialogButtonBox::rejected, this, &TitleBlockDimensionWidget::reject); } /** diff --git a/sources/titleblock/integrationmovetemplateshandler.cpp b/sources/titleblock/integrationmovetemplateshandler.cpp index 4589a72f7..dd324466f 100644 --- a/sources/titleblock/integrationmovetemplateshandler.cpp +++ b/sources/titleblock/integrationmovetemplateshandler.cpp @@ -226,10 +226,10 @@ void IntegrationMoveTitleBlockTemplatesHandler::initDialog() dialog_vlayout_ -> addLayout(dialog_glayout); dialog_vlayout_ -> addWidget(buttons_); - connect(use_existing_template_, SIGNAL(toggled(bool)), this, SLOT(correctRadioButtons())); - connect(integrate_new_template_, SIGNAL(toggled(bool)), this, SLOT(correctRadioButtons())); - connect(buttons_, SIGNAL(accepted()), integ_dialog_, SLOT(accept())); - connect(buttons_, SIGNAL(rejected()), integ_dialog_, SLOT(reject())); + connect(use_existing_template_, &QRadioButton::toggled, this, &IntegrationMoveTitleBlockTemplatesHandler::correctRadioButtons); + connect(integrate_new_template_, &QRadioButton::toggled, this, &IntegrationMoveTitleBlockTemplatesHandler::correctRadioButtons); + connect(buttons_, &QDialogButtonBox::accepted, integ_dialog_, &QDialog::accept); + connect(buttons_, &QDialogButtonBox::rejected, integ_dialog_, &QDialog::reject); } /** diff --git a/sources/titleblock/qettemplateeditor.cpp b/sources/titleblock/qettemplateeditor.cpp index 9f41c88d2..65d06cbfc 100644 --- a/sources/titleblock/qettemplateeditor.cpp +++ b/sources/titleblock/qettemplateeditor.cpp @@ -342,7 +342,7 @@ void QETTitleBlockTemplateEditor::editLogos() QDialog d(this); d.setWindowTitle(logo_manager_ -> windowTitle()); d.setLayout(vlayout0); - connect(buttons, SIGNAL(rejected()), &d, SLOT(reject())); + connect(buttons, &QDialogButtonBox::rejected, &d, &QDialog::reject); d.exec(); // prevent the logo manager from being deleted along with the dialog @@ -553,35 +553,37 @@ void QETTitleBlockTemplateEditor::initWidgets() template_cell_editor_widget_ -> setVisible(false); connect( - template_edition_area_view_, - SIGNAL(selectedCellsChanged(QList)), - this, - SLOT(selectedCellsChanged(QList)) + template_edition_area_view_, + &TitleBlockTemplateView::selectedCellsChanged, + this, + &QETTitleBlockTemplateEditor::selectedCellsChanged + ); + connect( + template_cell_editor_widget_, + &TitleBlockTemplateCellWidget::logoEditionRequested, + this, + &QETTitleBlockTemplateEditor::editLogos ); - connect(template_cell_editor_widget_, SIGNAL(logoEditionRequested()), - this, SLOT(editLogos())); connect( template_cell_editor_widget_, - SIGNAL(cellModified(ModifyTitleBlockCellCommand *)), + &TitleBlockTemplateCellWidget::cellModified, this, - SLOT(pushCellUndoCommand(ModifyTitleBlockCellCommand *)) + &QETTitleBlockTemplateEditor::pushCellUndoCommand ); connect( template_edition_area_view_, - SIGNAL(gridModificationRequested(TitleBlockTemplateCommand *)), + &TitleBlockTemplateView::gridModificationRequested, this, - SLOT(pushGridUndoCommand(TitleBlockTemplateCommand *)) + &QETTitleBlockTemplateEditor::pushGridUndoCommand ); connect( template_edition_area_view_, - SIGNAL(previewWidthChanged(int,int)), + &TitleBlockTemplateView::previewWidthChanged, this, - SLOT(savePreviewWidthToApplicationSettings(int, int)) + &QETTitleBlockTemplateEditor::savePreviewWidthToApplicationSettings ); - connect(undo_stack_, SIGNAL(cleanChanged(bool)), - this, SLOT(updateEditorTitle())); - connect(QApplication::clipboard(), SIGNAL(dataChanged()), - this, SLOT(updateActions())); + connect(undo_stack_, &QUndoStack::cleanChanged, this, &QETTitleBlockTemplateEditor::updateEditorTitle); + connect(QApplication::clipboard(), &QClipboard::dataChanged, this, &QETTitleBlockTemplateEditor::updateActions); } /** @@ -960,8 +962,8 @@ TitleBlockTemplateLocation QETTitleBlockTemplateEditor::getTitleBlockTemplateLoc dialog.setWindowTitle(title); dialog.setLayout(dialog_layout); - connect(buttons, SIGNAL(accepted()), &dialog, SLOT(accept())); - connect(buttons, SIGNAL(rejected()), &dialog, SLOT(reject())); + connect(buttons, &QDialogButtonBox::accepted, &dialog, &QDialog::accept); + connect(buttons, &QDialogButtonBox::rejected, &dialog, &QDialog::reject); if (dialog.exec() == QDialog::Accepted) { return(widget -> location()); @@ -1027,10 +1029,8 @@ void QETTitleBlockTemplateEditor::editTemplateInformation() : QDialogButtonBox::Ok | QDialogButtonBox::Cancel); dialog_layout -> addWidget(dialog_buttons); - connect(dialog_buttons, SIGNAL(accepted()), - &dialog_author, SLOT(accept())); - connect(dialog_buttons, SIGNAL(rejected()), - &dialog_author, SLOT(reject())); + connect(dialog_buttons, &QDialogButtonBox::accepted, &dialog_author, &QDialog::accept); + connect(dialog_buttons, &QDialogButtonBox::rejected, &dialog_author, &QDialog::reject); // run the dialog if (dialog_author.exec() == QDialog::Accepted && !read_only_) { diff --git a/sources/titleblock/templatecellwidget.cpp b/sources/titleblock/templatecellwidget.cpp index b98759aca..2cbb6fbd2 100644 --- a/sources/titleblock/templatecellwidget.cpp +++ b/sources/titleblock/templatecellwidget.cpp @@ -150,10 +150,10 @@ void TitleBlockTemplateCellWidget::initWidgets() // handle cell modifications connect(cell_type_input_, SIGNAL(activated(int)), this, SLOT(updateFormType(int))); connect(cell_type_input_, SIGNAL(activated(int)), this, SLOT(editType())); - connect(name_input_, SIGNAL(editingFinished()), this, SLOT(editName())); + connect(name_input_, &QLineEdit::editingFinished, this, &TitleBlockTemplateCellWidget::editName); connect(label_checkbox_, SIGNAL(clicked(bool)), this, SLOT(editLabelDisplayed())); - connect(label_edit_, SIGNAL(released()), this, SLOT(editLabel())); - connect(value_edit_, SIGNAL(released()), this, SLOT(editValue())); + connect(label_edit_, &QPushButton::released, this, &TitleBlockTemplateCellWidget::editLabel); + connect(value_edit_, &QPushButton::released, this, &TitleBlockTemplateCellWidget::editValue); connect(horiz_align_input_, SIGNAL(activated(int)), this, SLOT(editAlignment())); connect(vert_align_input_, SIGNAL(activated(int)), this, SLOT(editAlignment())); connect(font_size_input_, SIGNAL(valueChanged(int)), this, SLOT(editFontSize())); diff --git a/sources/titleblock/templatelogomanager.cpp b/sources/titleblock/templatelogomanager.cpp index 8b4d04cd4..c9ca7a36b 100644 --- a/sources/titleblock/templatelogomanager.cpp +++ b/sources/titleblock/templatelogomanager.cpp @@ -129,10 +129,10 @@ void TitleBlockTemplateLogoManager::initWidgets() this, SLOT(updateLogoInformations(QListWidgetItem *, QListWidgetItem *)) ); - connect(add_button_, SIGNAL(released()), this, SLOT(addLogo())); - connect(export_button_, SIGNAL(released()), this, SLOT(exportLogo())); - connect(delete_button_, SIGNAL(released()), this, SLOT(removeLogo())); - connect(rename_button_, SIGNAL(released()), this, SLOT(renameLogo())); + connect(add_button_, &QPushButton::released, this, &TitleBlockTemplateLogoManager::addLogo); + connect(export_button_, &QPushButton::released, this, &TitleBlockTemplateLogoManager::exportLogo); + connect(delete_button_, &QPushButton::released, this, &TitleBlockTemplateLogoManager::removeLogo); + connect(rename_button_, &QPushButton::released, this, &TitleBlockTemplateLogoManager::renameLogo); } /** @@ -217,11 +217,12 @@ QString TitleBlockTemplateLogoManager::confirmLogoName(const QString &initial_na connect(replace_button, SIGNAL(clicked()), signal_mapper, SLOT(map())); connect(rename_button, SIGNAL(clicked()), signal_mapper, SLOT(map())); connect(cancel_button, SIGNAL(clicked()), signal_mapper, SLOT(map())); - #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - connect(signal_mapper, &QSignalMapper::mappedInt, rename_dialog, &QDialog::done); - #else // TOD Qt6 only: remove, mappedInt() always available +#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) // TODO Qt6 only: remove, mappedInt() always available connect(signal_mapper, SIGNAL(mapped(int)), rename_dialog, SLOT(done(int))); - #endif + +#else + connect(signal_mapper, &QSignalMapper::mappedInt, rename_dialog, &QDialog::done); +#endif } rd_label -> setText( QString(tr( diff --git a/sources/titleblock/templatescollection.cpp b/sources/titleblock/templatescollection.cpp index 5ffc44caf..e26646c70 100644 --- a/sources/titleblock/templatescollection.cpp +++ b/sources/titleblock/templatescollection.cpp @@ -383,7 +383,7 @@ TitleBlockTemplatesFilesCollection::TitleBlockTemplatesFilesCollection(const QSt if (dir_.exists()) { watcher_.addPath(dir_.canonicalPath()); } - connect(&watcher_, SIGNAL(directoryChanged(const QString &)), this, SLOT(fileSystemChanged(const QString &))); + connect(&watcher_, &QFileSystemWatcher::directoryChanged, this, &TitleBlockTemplatesFilesCollection::fileSystemChanged); } /** diff --git a/sources/titleblock/templateview.cpp b/sources/titleblock/templateview.cpp index 096f96c0f..ca5f5421b 100644 --- a/sources/titleblock/templateview.cpp +++ b/sources/titleblock/templateview.cpp @@ -597,7 +597,7 @@ void TitleBlockTemplateView::init() setTransformationAnchor(QGraphicsView::AnchorUnderMouse); setBackgroundBrush(QBrush(QColor(248, 255, 160))); - connect(scene(), SIGNAL(selectionChanged()), this, SLOT(selectionChanged())); + connect(scene(), &QGraphicsScene::selectionChanged, this, &TitleBlockTemplateView::selectionChanged); } /** @@ -626,7 +626,7 @@ void TitleBlockTemplateView::applyColumnsWidths(bool animate) { animation -> setStartValue(QVariant(tbgrid_ -> columnMinimumWidth(COL_OFFSET + i))); animation -> setEndValue(QVariant(1.0 * applied_width)); animation -> setDuration(500); - connect(animation, SIGNAL(finished()), this, SLOT(updateColumnsHelperCells())); + connect(animation, &GridLayoutAnimation::finished, this, &TitleBlockTemplateView::updateColumnsHelperCells); animation -> start(QAbstractAnimation::DeleteWhenStopped); } total_applied_width += applied_width; @@ -747,10 +747,8 @@ void TitleBlockTemplateView::addCells() updateTotalWidthLabel(); total_width_helper_cell_ -> orientation = Qt::Horizontal; total_width_helper_cell_ -> setActions(QList() << change_preview_width_); - connect(total_width_helper_cell_, SIGNAL(contextMenuTriggered(HelperCell *)), - this, SLOT(updateLastContextMenuCell(HelperCell *))); - connect(total_width_helper_cell_, SIGNAL(doubleClicked(HelperCell*)), - this, SLOT(changePreviewWidth())); + connect(total_width_helper_cell_, &HelperCell::contextMenuTriggered, this, &TitleBlockTemplateView::updateLastContextMenuCell); + connect(total_width_helper_cell_, &HelperCell::doubleClicked, this, &TitleBlockTemplateView::changePreviewWidth); tbgrid_ -> addItem(total_width_helper_cell_, 0, COL_OFFSET, 1, col_count); // we also initialize an extra helper cells that shows the preview width is @@ -767,10 +765,8 @@ void TitleBlockTemplateView::addCells() current_col_cell -> setActions(columnsActions()); current_col_cell -> orientation = Qt::Horizontal; current_col_cell -> index = i; - connect(current_col_cell, SIGNAL(contextMenuTriggered(HelperCell *)), - this, SLOT(updateLastContextMenuCell(HelperCell *))); - connect(current_col_cell, SIGNAL(doubleClicked(HelperCell*)), - this, SLOT(editColumn(HelperCell *))); + connect(current_col_cell, &HelperCell::contextMenuTriggered, this, &TitleBlockTemplateView::updateLastContextMenuCell); + connect(current_col_cell, &HelperCell::doubleClicked, this, &TitleBlockTemplateView::editColumn); tbgrid_ -> addItem(current_col_cell, 1, COL_OFFSET + i, 1, 1); } @@ -783,10 +779,8 @@ void TitleBlockTemplateView::addCells() current_row_cell -> orientation = Qt::Vertical; current_row_cell -> index = i; current_row_cell -> setActions(rowsActions()); - connect(current_row_cell, SIGNAL(contextMenuTriggered(HelperCell *)), - this, SLOT(updateLastContextMenuCell(HelperCell *))); - connect(current_row_cell, SIGNAL(doubleClicked(HelperCell*)), - this, SLOT(editRow(HelperCell *))); + connect(current_row_cell, &HelperCell::contextMenuTriggered, this, &TitleBlockTemplateView::updateLastContextMenuCell); + connect(current_row_cell, &HelperCell::doubleClicked, this, &TitleBlockTemplateView::editRow); tbgrid_ -> addItem(current_row_cell, ROW_OFFSET + i, 0, 1, 1); } diff --git a/sources/ui/configpage/configpages.cpp b/sources/ui/configpage/configpages.cpp index 1a01a343e..25da62af2 100644 --- a/sources/ui/configpage/configpages.cpp +++ b/sources/ui/configpage/configpages.cpp @@ -110,7 +110,7 @@ NewDiagramPage::NewDiagramPage(QETProject *project, xrefpw -> setProperties (m_project -> defaultXRefProperties()); } - connect(ipw,SIGNAL(openAutoNumFolioEditor(QString)),this,SLOT(changeToAutoFolioTab())); + connect(ipw, &TitleBlockPropertiesWidget::openAutoNumFolioEditor, this, &NewDiagramPage::changeToAutoFolioTab); // main tab widget QTabWidget *tab_widget = new QTabWidget(this); @@ -138,7 +138,7 @@ NewDiagramPage::NewDiagramPage(QETProject *project, */ NewDiagramPage::~NewDiagramPage() { - disconnect(ipw,SIGNAL(openAutoNumFolioEditor(QString)),this,SLOT(changeToAutoFolioTab())); + disconnect(ipw, &TitleBlockPropertiesWidget::openAutoNumFolioEditor, this, &NewDiagramPage::changeToAutoFolioTab); } /** diff --git a/sources/ui/configpage/projectconfigpages.cpp b/sources/ui/configpage/projectconfigpages.cpp index f12df6866..22da41ebe 100644 --- a/sources/ui/configpage/projectconfigpages.cpp +++ b/sources/ui/configpage/projectconfigpages.cpp @@ -391,37 +391,37 @@ void ProjectAutoNumConfigPage::adjustReadOnly() void ProjectAutoNumConfigPage::buildConnections() { //Management Tab - connect (m_amw, SIGNAL(applyPressed()), this, SLOT(applyManagement())); + connect(m_amw, &AutoNumberingManagementW::applyPressed, this, &ProjectAutoNumConfigPage::applyManagement); //Conductor Tab connect(m_saw_conductor, &SelectAutonumW::applyPressed, this, &ProjectAutoNumConfigPage::saveContextConductor); connect(m_saw_conductor, &SelectAutonumW::removeClicked, this, &ProjectAutoNumConfigPage::removeContextConductor); - #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - connect(m_saw_conductor->contextComboBox(), &QComboBox::textActivated, this, &ProjectAutoNumConfigPage::updateContextConductor); - #else // TODO Qt6 only: remove, textActivated() always available +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) // TODO Qt6 only: remove, textActivated() always available connect(m_saw_conductor->contextComboBox(), SIGNAL(activated(QString)), this, SLOT(updateContextConductor(QString))); - #endif +#else + connect(m_saw_conductor->contextComboBox(), &QComboBox::textActivated, this, &ProjectAutoNumConfigPage::updateContextConductor); +#endif //Element Tab connect(m_saw_element, &SelectAutonumW::applyPressed, this, &ProjectAutoNumConfigPage::saveContextElement); connect(m_saw_element, &SelectAutonumW::removeClicked, this, &ProjectAutoNumConfigPage::removeContextElement); - #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - connect(m_saw_element->contextComboBox(), &QComboBox::textActivated, this, &ProjectAutoNumConfigPage::updateContextElement); - #else // TODO Qt6 only: remove, textActivated() always available +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) // TODO Qt6 only: remove, textActivated() always available connect(m_saw_element->contextComboBox(), SIGNAL(activated(QString)), this, SLOT(updateContextElement(QString))); - #endif +#else + connect(m_saw_element->contextComboBox(), &QComboBox::textActivated, this, &ProjectAutoNumConfigPage::updateContextElement); +#endif //Folio Tab connect(m_saw_folio, &SelectAutonumW::applyPressed, this, &ProjectAutoNumConfigPage::saveContextFolio); connect(m_saw_folio, &SelectAutonumW::removeClicked, this, &ProjectAutoNumConfigPage::removeContextFolio); - #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - connect(m_saw_folio->contextComboBox(), &QComboBox::textActivated, this, &ProjectAutoNumConfigPage::updateContextFolio); - #else // TODO Qt6 only: remove, textActivated() always available +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) // TODO Qt6 only: remove, textActivated() always available connect(m_saw_folio->contextComboBox(), SIGNAL(activated(QString)), this, SLOT(updateContextFolio(QString))); - #endif +#else + connect(m_saw_folio->contextComboBox(), &QComboBox::textActivated, this, &ProjectAutoNumConfigPage::updateContextFolio); +#endif // Auto Folio Numbering - connect (m_faw, SIGNAL (applyPressed()), this, SLOT (applyAutoNum())); + connect(m_faw, &FolioAutonumberingW::applyPressed, this, &ProjectAutoNumConfigPage::applyAutoNum); } /** diff --git a/sources/ui/diagramcontextwidget.cpp b/sources/ui/diagramcontextwidget.cpp index 9cacb2685..396c89b2e 100644 --- a/sources/ui/diagramcontextwidget.cpp +++ b/sources/ui/diagramcontextwidget.cpp @@ -25,7 +25,7 @@ DiagramContextWidget::DiagramContextWidget(QWidget *parent) : ui(new Ui::DiagramContextWidget) { ui->setupUi(this); - connect(ui->m_table, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(checkTableRows())); + connect(ui->m_table, &QTableWidget::itemChanged, this, &DiagramContextWidget::checkTableRows); } DiagramContextWidget::~DiagramContextWidget() diff --git a/sources/ui/diagrampropertiesdialog.cpp b/sources/ui/diagrampropertiesdialog.cpp index 3496fcdae..e07de4a6a 100644 --- a/sources/ui/diagrampropertiesdialog.cpp +++ b/sources/ui/diagrampropertiesdialog.cpp @@ -62,7 +62,7 @@ DiagramPropertiesDialog::DiagramPropertiesDialog(Diagram *diagram, QWidget *pare titleblock_infos = new TitleBlockPropertiesWidget(titleblock, false, diagram->project(), this); titleblock_infos -> setReadOnly(diagram_is_read_only); - connect(titleblock_infos,SIGNAL(openAutoNumFolioEditor(QString)),this,SLOT(editAutoFolioNum())); + connect(titleblock_infos, &TitleBlockPropertiesWidget::openAutoNumFolioEditor, this, &DiagramPropertiesDialog::editAutoFolioNum); //titleblock_infos->setMinimumSize(590,480); //Minimum Size needed for correct display //Conductor widget @@ -77,8 +77,8 @@ DiagramPropertiesDialog::DiagramPropertiesDialog(Diagram *diagram, QWidget *pare // Buttons QDialogButtonBox boutons(diagram_is_read_only ? QDialogButtonBox::Ok : QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - connect(&boutons, SIGNAL(accepted()), this, SLOT(accept())); - connect(&boutons, SIGNAL(rejected()), this, SLOT(reject())); + connect(&boutons, &QDialogButtonBox::accepted, this, &DiagramPropertiesDialog::accept); + connect(&boutons, &QDialogButtonBox::rejected, this, &DiagramPropertiesDialog::reject); QGridLayout *glayout = new QGridLayout; glayout->addWidget(border_infos,0,0); diff --git a/sources/ui/diagrampropertieseditordockwidget.cpp b/sources/ui/diagrampropertieseditordockwidget.cpp index 21ca88f13..13be007f8 100644 --- a/sources/ui/diagrampropertieseditordockwidget.cpp +++ b/sources/ui/diagrampropertieseditordockwidget.cpp @@ -45,19 +45,15 @@ void DiagramPropertiesEditorDockWidget::setDiagram(Diagram *diagram) if (m_diagram) { - disconnect(m_diagram, SIGNAL(selectionChanged()), - this, SLOT(selectionChanged())); - disconnect(m_diagram, SIGNAL(destroyed()), - this, SLOT(diagramWasDeleted())); + disconnect(m_diagram, &Diagram::selectionChanged, this, &DiagramPropertiesEditorDockWidget::selectionChanged); + disconnect(m_diagram, &QObject::destroyed, this, &DiagramPropertiesEditorDockWidget::diagramWasDeleted); } if (diagram) { m_diagram = diagram; - connect(m_diagram, SIGNAL(selectionChanged()), - this, SLOT(selectionChanged()), Qt::QueuedConnection); - connect(m_diagram, SIGNAL(destroyed()), - this, SLOT(diagramWasDeleted())); + connect(m_diagram, &Diagram::selectionChanged, this, &DiagramPropertiesEditorDockWidget::selectionChanged, Qt::QueuedConnection); + connect(m_diagram, &QObject::destroyed, this, &DiagramPropertiesEditorDockWidget::diagramWasDeleted); selectionChanged(); } else diff --git a/sources/ui/linksingleelementwidget.cpp b/sources/ui/linksingleelementwidget.cpp index 528a20e8a..08c65cc55 100644 --- a/sources/ui/linksingleelementwidget.cpp +++ b/sources/ui/linksingleelementwidget.cpp @@ -717,8 +717,7 @@ void LinkSingleElementWidget::on_m_tree_widget_itemDoubleClicked( if (m_showed_element) { - disconnect(m_showed_element, SIGNAL(destroyed()), - this, SLOT(showedElementWasDeleted())); + disconnect(m_showed_element, &QObject::destroyed, this, &LinkSingleElementWidget::showedElementWasDeleted); m_showed_element->setHighlighted(false); } @@ -726,8 +725,7 @@ void LinkSingleElementWidget::on_m_tree_widget_itemDoubleClicked( elmt->diagram()->showMe(); elmt->setHighlighted(true); m_showed_element = elmt; - connect(m_showed_element, SIGNAL(destroyed()), - this, SLOT(showedElementWasDeleted())); + connect(m_showed_element, &QObject::destroyed, this, &LinkSingleElementWidget::showedElementWasDeleted); } diff --git a/sources/ui/masterpropertieswidget.cpp b/sources/ui/masterpropertieswidget.cpp index e5952a5e5..813ac95cb 100644 --- a/sources/ui/masterpropertieswidget.cpp +++ b/sources/ui/masterpropertieswidget.cpp @@ -154,14 +154,12 @@ void MasterPropertiesWidget::setElement(Element *element) m_element->setHighlighted(false); if (m_project) - disconnect(m_project, SIGNAL(diagramRemoved(QETProject*,Diagram*)), - this, SLOT(diagramWasdeletedFromProject())); + disconnect(m_project, &QETProject::diagramRemoved, this, &MasterPropertiesWidget::diagramWasdeletedFromProject); if(Q_LIKELY(element->diagram() && element->diagram()->project())) { m_project = element->diagram()->project(); - connect(m_project, SIGNAL(diagramRemoved(QETProject*,Diagram*)), - this, SLOT(diagramWasdeletedFromProject())); + connect(m_project, &QETProject::diagramRemoved, this, &MasterPropertiesWidget::diagramWasdeletedFromProject); } else m_project = nullptr; @@ -397,8 +395,7 @@ void MasterPropertiesWidget::showElementFromTWI(QTreeWidgetItem *qtwi, int colum Q_UNUSED(column); if (m_showed_element) { - disconnect(m_showed_element, SIGNAL(destroyed()), - this, SLOT(showedElementWasDeleted())); + disconnect(m_showed_element, &QObject::destroyed, this, &MasterPropertiesWidget::showedElementWasDeleted); m_showed_element -> setHighlighted(false); } if (m_element) @@ -407,8 +404,7 @@ void MasterPropertiesWidget::showElementFromTWI(QTreeWidgetItem *qtwi, int colum m_showed_element = m_qtwi_hash[qtwi]; m_showed_element->diagram()->showMe(); m_showed_element->setHighlighted(true); - connect(m_showed_element, SIGNAL(destroyed()), - this, SLOT(showedElementWasDeleted())); + connect(m_showed_element, &QObject::destroyed, this, &MasterPropertiesWidget::showedElementWasDeleted); } /** diff --git a/sources/ui/projectpropertiesdialog.cpp b/sources/ui/projectpropertiesdialog.cpp index b9bea1c71..28dfc07c0 100644 --- a/sources/ui/projectpropertiesdialog.cpp +++ b/sources/ui/projectpropertiesdialog.cpp @@ -45,8 +45,8 @@ ProjectPropertiesDialog::ProjectPropertiesDialog(QETProject *project, QWidget *p m_properties_dialog->addPage(new TerminalStripProjectConfigPage { project, parent }); connect(projectAutoNumConfigPage,SIGNAL(setAutoNum(QString)),newDiagramPage,SLOT(setFolioAutonum(QString))); - connect(projectAutoNumConfigPage,SIGNAL(saveCurrentTbp()),newDiagramPage,SLOT(saveCurrentTbp())); - connect(projectAutoNumConfigPage,SIGNAL(loadSavedTbp()),newDiagramPage,SLOT(loadSavedTbp())); + connect(projectAutoNumConfigPage, &ProjectAutoNumConfigPage::saveCurrentTbp, newDiagramPage, &NewDiagramPage::saveCurrentTbp); + connect(projectAutoNumConfigPage, &ProjectAutoNumConfigPage::loadSavedTbp, newDiagramPage, &NewDiagramPage::loadSavedTbp); } /** diff --git a/sources/ui/xrefpropertieswidget.cpp b/sources/ui/xrefpropertieswidget.cpp index 94c03a72a..7909c44df 100644 --- a/sources/ui/xrefpropertieswidget.cpp +++ b/sources/ui/xrefpropertieswidget.cpp @@ -37,7 +37,7 @@ XRefPropertiesWidget::XRefPropertiesWidget(QHash prope { ui->setupUi(this); buildUi(); - connect(ui->m_display_has_cross_rb, SIGNAL(toggled(bool)), ui->m_cross_properties_gb, SLOT(setEnabled(bool))); + connect(ui->m_display_has_cross_rb, &QRadioButton::toggled, ui->m_cross_properties_gb, &QWidget::setEnabled); connect(ui->m_type_cb, SIGNAL(currentIndexChanged(int)), this, SLOT(typeChanged())); connect(ui->m_snap_to_cb, SIGNAL(currentIndexChanged(int)), this, SLOT(enableOffsetSB(int))); updateDisplay(); @@ -49,7 +49,7 @@ XRefPropertiesWidget::XRefPropertiesWidget(QHash prope */ XRefPropertiesWidget::~XRefPropertiesWidget() { - disconnect(ui->m_display_has_cross_rb, SIGNAL(toggled(bool)), ui->m_cross_properties_gb, SLOT(setEnabled(bool))); + disconnect(ui->m_display_has_cross_rb, &QRadioButton::toggled, ui->m_cross_properties_gb, &QWidget::setEnabled); disconnect(ui->m_type_cb, SIGNAL(currentIndexChanged(int)), this, SLOT(typeChanged())); disconnect(ui->m_snap_to_cb, SIGNAL(currentIndexChanged(int)), this, SLOT(enableOffsetSB(int))); delete ui; From 438e2ade3a04444cd828d4efe942e20f0b8f8a67 Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sat, 8 Aug 2026 18:25:08 +0200 Subject: [PATCH 07/19] Modernize and fix buttonClicked connects. Two QButtonGroup::buttonClicked overload-ambiguity fixes, plus cleanup of the connects sitting alongside them: TitleBlockDimensionWidget: switched from the deprecated buttonClicked(int) id-based overload to buttonClicked(QAbstractButton*), disambiguated via qOverload. The slot doesn't use the argument either way, so this is a pure modernization with no behavior change. ExportPropertiesWidget: same buttonClicked fix for exported_content_choices, plus modernized the adjacent currentIndexChanged(int) relay (disambiguated via qOverload, since QComboBox::currentIndexChanged(QString) still exists pre-Qt6) and six QCheckBox::stateChanged(int) relays (single signal, no disambiguation needed). QCheckBox::stateChanged(int) is deprecated as of Qt 6.7 in favor of checkStateChanged(Qt::CheckState), but this project has no Qt6 minor version floor pinned in CMakeLists.txt, so stateChanged(int) remains the correct unconditional choice for now. QT_VERSION_CHECK(6, 7, 0) guarded checkStateChanged was introduced to avoid future warnings. --- sources/exportpropertieswidget.cpp | 25 +++++++++++++++++-------- sources/titleblock/dimensionwidget.cpp | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/sources/exportpropertieswidget.cpp b/sources/exportpropertieswidget.cpp index b31dd3813..4c9d51308 100644 --- a/sources/exportpropertieswidget.cpp +++ b/sources/exportpropertieswidget.cpp @@ -233,12 +233,21 @@ void ExportPropertiesWidget::build() connect(button_browse, &QPushButton::released, this, &ExportPropertiesWidget::slot_chooseADirectory); // emission de signaux lors du changement de format et lors du changement de zone exportee - connect(format, SIGNAL(currentIndexChanged(int)), this, SIGNAL(formatChanged())); - connect(exported_content_choices, SIGNAL(buttonClicked(QAbstractButton *)), this, SIGNAL(exportedAreaChanged())); - connect(draw_grid, SIGNAL(stateChanged(int)), this, SIGNAL(optionChanged())); - connect(draw_border, SIGNAL(stateChanged(int)), this, SIGNAL(optionChanged())); - connect(draw_titleblock, SIGNAL(stateChanged(int)), this, SIGNAL(optionChanged())); - connect(draw_terminals, SIGNAL(stateChanged(int)), this, SIGNAL(optionChanged())); - connect(draw_bg_transparent, SIGNAL(stateChanged(int)), this, SIGNAL(optionChanged())); - connect(draw_colored_conductors, SIGNAL(stateChanged(int)), this, SIGNAL(optionChanged())); + connect(format, qOverload(&QComboBox::currentIndexChanged), this, &ExportPropertiesWidget::formatChanged); + connect(exported_content_choices, qOverload(&QButtonGroup::buttonClicked), this, &ExportPropertiesWidget::exportedAreaChanged); +#if QT_VERSION < QT_VERSION_CHECK(6, 7, 0) // TODO Qt 6.7: remove, checkStateChanged() always available + connect(draw_grid, &QCheckBox::stateChanged, this, &ExportPropertiesWidget::optionChanged); + connect(draw_border, &QCheckBox::stateChanged, this, &ExportPropertiesWidget::optionChanged); + connect(draw_titleblock, &QCheckBox::stateChanged, this, &ExportPropertiesWidget::optionChanged); + connect(draw_terminals, &QCheckBox::stateChanged, this, &ExportPropertiesWidget::optionChanged); + connect(draw_bg_transparent, &QCheckBox::stateChanged, this, &ExportPropertiesWidget::optionChanged); + connect(draw_colored_conductors, &QCheckBox::stateChanged, this, &ExportPropertiesWidget::optionChanged); +#else + connect(draw_grid, &QCheckBox::checkStateChanged, this, &ExportPropertiesWidget::optionChanged); + connect(draw_border, &QCheckBox::checkStateChanged, this, &ExportPropertiesWidget::optionChanged); + connect(draw_titleblock, &QCheckBox::checkStateChanged, this, &ExportPropertiesWidget::optionChanged); + connect(draw_terminals, &QCheckBox::checkStateChanged, this, &ExportPropertiesWidget::optionChanged); + connect(draw_bg_transparent, &QCheckBox::checkStateChanged, this, &ExportPropertiesWidget::optionChanged); + connect(draw_colored_conductors, &QCheckBox::checkStateChanged, this, &ExportPropertiesWidget::optionChanged); +#endif } diff --git a/sources/titleblock/dimensionwidget.cpp b/sources/titleblock/dimensionwidget.cpp index 62d20df56..228b9ad57 100644 --- a/sources/titleblock/dimensionwidget.cpp +++ b/sources/titleblock/dimensionwidget.cpp @@ -143,7 +143,7 @@ void TitleBlockDimensionWidget::initWidgets() dimension_type_ -> addButton(relative_button_, QET::RelativeToTotalLength); dimension_type_ -> addButton(remaining_button_, QET::RelativeToRemainingLength); absolute_button_ -> setChecked(true); - connect(dimension_type_, SIGNAL(buttonClicked(int)), this, SLOT(updateSpinBoxSuffix())); + connect(dimension_type_, qOverload(&QButtonGroup::buttonClicked), this, &TitleBlockDimensionWidget::updateSpinBoxSuffix); } updateSpinBoxSuffix(); From 293e61abeb6e996053be049e6e65ddcb96fc921e Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sat, 8 Aug 2026 18:37:53 +0200 Subject: [PATCH 08/19] Modernizes the signal/slot connect and solves the disambiguities of the remaining currentIndexChanged(int) connects via qOverload, since QComboBox::currentIndexChanged(QString) still exists pre-Qt6. TitleBlockTemplateLocationChooser: collections_ -> updateTemplates() (a virtual method; pointer-to-member dispatch still resolves to the TitleBlockTemplateLocationSaver override at runtime as expected) TitleBlockTemplateLocationSaver: templates_ -> updateNewName() TitleBlockPropertiesWidget: m_tbt_cb -> changeCurrentTitleBlockTemplate(int) XRefPropertiesWidget: m_type_cb -> typeChanged(), m_snap_to_cb ->enableOffsetSB(int), both connect (constructor) and disconnect(destructor) --- sources/titleblock/templatelocationchooser.cpp | 3 +-- sources/titleblock/templatelocationsaver.cpp | 2 +- sources/ui/titleblockpropertieswidget.cpp | 8 ++++---- sources/ui/xrefpropertieswidget.cpp | 8 ++++---- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/sources/titleblock/templatelocationchooser.cpp b/sources/titleblock/templatelocationchooser.cpp index 7fc5ab37e..62d0ca700 100644 --- a/sources/titleblock/templatelocationchooser.cpp +++ b/sources/titleblock/templatelocationchooser.cpp @@ -98,8 +98,7 @@ void TitleBlockTemplateLocationChooser::init() templates_ = new QComboBox(); updateCollections(); - connect(collections_, SIGNAL(currentIndexChanged(int)), - this, SLOT(updateTemplates())); + connect(collections_, qOverload(&QComboBox::currentIndexChanged), this, &TitleBlockTemplateLocationChooser::updateTemplates); form_layout_ = new QFormLayout(); form_layout_ -> addRow( diff --git a/sources/titleblock/templatelocationsaver.cpp b/sources/titleblock/templatelocationsaver.cpp index 3af73cd6a..0c27b1896 100644 --- a/sources/titleblock/templatelocationsaver.cpp +++ b/sources/titleblock/templatelocationsaver.cpp @@ -80,7 +80,7 @@ void TitleBlockTemplateLocationSaver::setLocation(const TitleBlockTemplateLocati void TitleBlockTemplateLocationSaver::init() { new_name_ = new QLineEdit(); - connect(templates_, SIGNAL(currentIndexChanged(int)), this, SLOT(updateNewName())); + connect(templates_, qOverload(&QComboBox::currentIndexChanged), this, &TitleBlockTemplateLocationSaver::updateNewName); form_layout_ -> addRow(tr("ou nouveau nom", "used in save as form"), new_name_); updateTemplates(); } diff --git a/sources/ui/titleblockpropertieswidget.cpp b/sources/ui/titleblockpropertieswidget.cpp index edce4217f..e12acfb07 100644 --- a/sources/ui/titleblockpropertieswidget.cpp +++ b/sources/ui/titleblockpropertieswidget.cpp @@ -348,10 +348,10 @@ void TitleBlockPropertiesWidget::initDialog( m_tbt_menu -> addAction(m_tbt_duplicate); ui -> m_tbt_pb -> setMenu(m_tbt_menu); - connect(ui->m_tbt_cb, - SIGNAL(currentIndexChanged(int)), - this, - SLOT(changeCurrentTitleBlockTemplate(int))); + connect(ui->m_tbt_cb, + qOverload(&QComboBox::currentIndexChanged), + this, + &TitleBlockPropertiesWidget::changeCurrentTitleBlockTemplate); if (project!= nullptr){ keys_2 = project -> folioAutoNum().keys(); diff --git a/sources/ui/xrefpropertieswidget.cpp b/sources/ui/xrefpropertieswidget.cpp index 7909c44df..54bebd143 100644 --- a/sources/ui/xrefpropertieswidget.cpp +++ b/sources/ui/xrefpropertieswidget.cpp @@ -38,8 +38,8 @@ XRefPropertiesWidget::XRefPropertiesWidget(QHash prope ui->setupUi(this); buildUi(); connect(ui->m_display_has_cross_rb, &QRadioButton::toggled, ui->m_cross_properties_gb, &QWidget::setEnabled); - connect(ui->m_type_cb, SIGNAL(currentIndexChanged(int)), this, SLOT(typeChanged())); - connect(ui->m_snap_to_cb, SIGNAL(currentIndexChanged(int)), this, SLOT(enableOffsetSB(int))); + connect(ui->m_type_cb, qOverload(&QComboBox::currentIndexChanged), this, &XRefPropertiesWidget::typeChanged); + connect(ui->m_snap_to_cb, qOverload(&QComboBox::currentIndexChanged), this, &XRefPropertiesWidget::enableOffsetSB); updateDisplay(); } @@ -50,8 +50,8 @@ XRefPropertiesWidget::XRefPropertiesWidget(QHash prope XRefPropertiesWidget::~XRefPropertiesWidget() { disconnect(ui->m_display_has_cross_rb, &QRadioButton::toggled, ui->m_cross_properties_gb, &QWidget::setEnabled); - disconnect(ui->m_type_cb, SIGNAL(currentIndexChanged(int)), this, SLOT(typeChanged())); - disconnect(ui->m_snap_to_cb, SIGNAL(currentIndexChanged(int)), this, SLOT(enableOffsetSB(int))); + disconnect(ui->m_type_cb, qOverload(&QComboBox::currentIndexChanged), this, &XRefPropertiesWidget::typeChanged); + disconnect(ui->m_snap_to_cb, qOverload(&QComboBox::currentIndexChanged), this, &XRefPropertiesWidget::enableOffsetSB); delete ui; } From 79da321ddc522d4ab9511e8effbe3f68079600a3 Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sat, 8 Aug 2026 18:55:01 +0200 Subject: [PATCH 09/19] Missed a necessary overload in the previous commit. --- sources/qetdiagrameditor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 68d5bdd3b..32ca046cf 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -1923,7 +1923,7 @@ void QETDiagramEditor::addProjectView(ProjectView *project_view) //Manage the close event of project connect(project_view, &ProjectView::projectClosed, this, &QETDiagramEditor::projectWasClosed); //Manage the adding of diagram - connect(project_view, &ProjectView::diagramAdded, this, &QETDiagramEditor::diagramWasAdded); + connect(project_view, qOverload(&ProjectView::diagramAdded), this, &QETDiagramEditor::diagramWasAdded); if (QETProject *project = project_view -> project()) connect(project, &QETProject::readOnlyChanged, this, &QETDiagramEditor::slot_updateActions); From a668ccfa90242ddc7abdb7a9162b8f190b62e633 Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sat, 8 Aug 2026 21:29:17 +0200 Subject: [PATCH 10/19] Migrating the remaining signal/slot connects with an ambigious activated(int) via qOverload, since QComboBox::activated(QString) still exists pre-Qt6 and makes &QComboBox::activated alone ambiguous: - StyleEditor: outline_color/line_style/size_weight/filling_color, both connect (activeConnections(true)) and disconnect (activeConnections(false)) branches. antialiasing's stateChanged(int) connect modernized alongside them (single signal, no disambiguation needed). - TitleBlockTemplateCellWidget: cell_type_input_ (two connects to different slots), horiz_align_input_, vert_align_input_, logo_input_. Also modernises QETApp's system tray connect. In two cases stateChanged already replaced with version guarded checkStateChanged for future proofing. --- sources/editor/styleeditor.cpp | 28 +++++++++++++++-------- sources/exportdialog.cpp | 12 +++++----- sources/qetapp.cpp | 3 +-- sources/qtextorientationspinboxwidget.cpp | 6 ++--- sources/titleblock/templatecellwidget.cpp | 12 +++++----- 5 files changed, 34 insertions(+), 27 deletions(-) diff --git a/sources/editor/styleeditor.cpp b/sources/editor/styleeditor.cpp index 1818e8bf5..30a318e3d 100644 --- a/sources/editor/styleeditor.cpp +++ b/sources/editor/styleeditor.cpp @@ -582,17 +582,25 @@ bool StyleEditor::isStyleEditable(QList cep_list) */ void StyleEditor::activeConnections(bool active) { if (active) { - connect (outline_color, SIGNAL(activated(int)), this, SLOT(updatePartColor())); - connect(line_style, SIGNAL(activated(int)), this, SLOT(updatePartLineStyle())); - connect(size_weight, SIGNAL(activated(int)), this, SLOT(updatePartLineWeight())); - connect(filling_color, SIGNAL(activated(int)), this, SLOT(updatePartFilling())); - connect(antialiasing, SIGNAL(stateChanged(int)), this, SLOT(updatePartAntialiasing())); + connect(outline_color, qOverload(&QComboBox::activated), this, &StyleEditor::updatePartColor); + connect(line_style, qOverload(&QComboBox::activated), this, &StyleEditor::updatePartLineStyle); + connect(size_weight, qOverload(&QComboBox::activated), this, &StyleEditor::updatePartLineWeight); + connect(filling_color, qOverload(&QComboBox::activated), this, &StyleEditor::updatePartFilling); +#if QT_VERSION < QT_VERSION_CHECK(6, 7, 0) // TODO Qt 6.7: remove, checkStateChanged() always available + connect(antialiasing, &QCheckBox::stateChanged, this, &StyleEditor::updatePartAntialiasing); +#else + connect(antialiasing, &QCheckBox::checkStateChanged, this, &StyleEditor::updatePartAntialiasing); +#endif } else { - disconnect(outline_color, SIGNAL(activated(int)), this, SLOT(updatePartColor())); - disconnect(line_style, SIGNAL(activated(int)), this, SLOT(updatePartLineStyle())); - disconnect(size_weight, SIGNAL(activated(int)), this, SLOT(updatePartLineWeight())); - disconnect(filling_color, SIGNAL(activated(int)), this, SLOT(updatePartFilling())); - disconnect(antialiasing, SIGNAL(stateChanged(int)), this, SLOT(updatePartAntialiasing())); + disconnect(outline_color, qOverload(&QComboBox::activated), this, &StyleEditor::updatePartColor); + disconnect(line_style, qOverload(&QComboBox::activated), this, &StyleEditor::updatePartLineStyle); + disconnect(size_weight, qOverload(&QComboBox::activated), this, &StyleEditor::updatePartLineWeight); + disconnect(filling_color, qOverload(&QComboBox::activated), this, &StyleEditor::updatePartFilling); +#if QT_VERSION < QT_VERSION_CHECK(6, 7, 0) // TODO Qt 6.7: remove, checkStateChanged() always available + disconnect(antialiasing, &QCheckBox::stateChanged, this, &StyleEditor::updatePartAntialiasing); +#else + disconnect(antialiasing, &QCheckBox::checkStateChanged, this, &StyleEditor::updatePartAntialiasing); +#endif } } diff --git a/sources/exportdialog.cpp b/sources/exportdialog.cpp index 860b6ce6d..47eec0f55 100644 --- a/sources/exportdialog.cpp +++ b/sources/exportdialog.cpp @@ -181,18 +181,18 @@ QWidget *ExportDialog::initDiagramsListPart() height_mapper_ -> setMapping(diagram_line -> height, line_count); ratio_mapper_ -> setMapping(diagram_line -> keep_ratio, line_count); reset_mapper_ -> setMapping(diagram_line -> reset_size, line_count); - connect(diagram_line -> width, SIGNAL(valueChanged(int)), width_mapper_, SLOT(map())); - connect(diagram_line -> height, SIGNAL(valueChanged(int)), height_mapper_, SLOT(map())); - connect(diagram_line -> keep_ratio, SIGNAL(toggled(bool)), ratio_mapper_, SLOT(map())); - connect(diagram_line -> reset_size, SIGNAL(clicked(bool)), reset_mapper_, SLOT(map())); + connect(diagram_line -> width, qOverload(&QSpinBox::valueChanged), width_mapper_, qOverload<>(&QSignalMapper::map)); + connect(diagram_line -> height, qOverload(&QSpinBox::valueChanged), height_mapper_, qOverload<>(&QSignalMapper::map)); + connect(diagram_line -> keep_ratio, &QPushButton::toggled, ratio_mapper_, qOverload<>(&QSignalMapper::map)); + connect(diagram_line -> reset_size, &QPushButton::clicked, reset_mapper_, qOverload<>(&QSignalMapper::map)); // mappings et signaux pour l'apercu du schema preview_mapper_ -> setMapping(diagram_line -> preview, line_count); - connect(diagram_line -> preview, SIGNAL(clicked(bool)), preview_mapper_, SLOT(map())); + connect(diagram_line -> preview, &QPushButton::clicked, preview_mapper_, qOverload<>(&QSignalMapper::map)); // mappings et signaux pour l'export du schema vers le presse-papier clipboard_mapper_ -> setMapping(diagram_line -> clipboard, line_count); - connect(diagram_line -> clipboard, SIGNAL(clicked(bool)), clipboard_mapper_, SLOT(map())); + connect(diagram_line -> clipboard, &QPushButton::clicked, clipboard_mapper_, qOverload<>(&QSignalMapper::map)); } QWidget *widget_diagrams_list = new QWidget(); diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index 7a7912fa7..f2a51bb5d 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -2419,8 +2419,7 @@ void QETApp::initSystemTray() // initialisation de l'icone du systray m_qsti = new QSystemTrayIcon(QET::Icons::QETLogo, this); m_qsti -> setToolTip(tr("QElectroTech", "systray icon tooltip")); - connect(m_qsti, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), - this, SLOT(systray(QSystemTrayIcon::ActivationReason))); + connect(m_qsti, &QSystemTrayIcon::activated, this, &QETApp::systray); m_qsti -> setContextMenu(menu_systray); m_qsti -> show(); } diff --git a/sources/qtextorientationspinboxwidget.cpp b/sources/qtextorientationspinboxwidget.cpp index 14eefbb17..c2150fdf6 100644 --- a/sources/qtextorientationspinboxwidget.cpp +++ b/sources/qtextorientationspinboxwidget.cpp @@ -117,10 +117,10 @@ void QTextOrientationSpinBoxWidget::build() spin_box_ -> setSuffix("°"); // met en place les relations entre le SpinBox et le QTextOrientationWidget - connect(spin_box_, - SIGNAL(valueChanged(double)), + connect(spin_box_, + qOverload(&QDoubleSpinBox::valueChanged), orientation_widget_, - SLOT(setOrientation(double))); + &QTextOrientationWidget::setOrientation); connect(orientation_widget_, &QTextOrientationWidget::orientationChanged, spin_box_, diff --git a/sources/titleblock/templatecellwidget.cpp b/sources/titleblock/templatecellwidget.cpp index 2cbb6fbd2..c9068d140 100644 --- a/sources/titleblock/templatecellwidget.cpp +++ b/sources/titleblock/templatecellwidget.cpp @@ -148,17 +148,17 @@ void TitleBlockTemplateCellWidget::initWidgets() connect(add_logo_input_, SIGNAL(released()), this, SIGNAL(logoEditionRequested())); // handle cell modifications - connect(cell_type_input_, SIGNAL(activated(int)), this, SLOT(updateFormType(int))); - connect(cell_type_input_, SIGNAL(activated(int)), this, SLOT(editType())); + connect(cell_type_input_, qOverload(&QComboBox::activated), this, &TitleBlockTemplateCellWidget::updateFormType); + connect(cell_type_input_, qOverload(&QComboBox::activated), this, &TitleBlockTemplateCellWidget::editType); connect(name_input_, &QLineEdit::editingFinished, this, &TitleBlockTemplateCellWidget::editName); connect(label_checkbox_, SIGNAL(clicked(bool)), this, SLOT(editLabelDisplayed())); connect(label_edit_, &QPushButton::released, this, &TitleBlockTemplateCellWidget::editLabel); connect(value_edit_, &QPushButton::released, this, &TitleBlockTemplateCellWidget::editValue); - connect(horiz_align_input_, SIGNAL(activated(int)), this, SLOT(editAlignment())); - connect(vert_align_input_, SIGNAL(activated(int)), this, SLOT(editAlignment())); - connect(font_size_input_, SIGNAL(valueChanged(int)), this, SLOT(editFontSize())); + connect(horiz_align_input_, qOverload(&QComboBox::activated), this, &TitleBlockTemplateCellWidget::editAlignment); + connect(vert_align_input_, qOverload(&QComboBox::activated), this, &TitleBlockTemplateCellWidget::editAlignment); + connect(font_size_input_, qOverload(&QSpinBox::valueChanged), this, &TitleBlockTemplateCellWidget::editFontSize); connect(font_adjust_input_, SIGNAL(clicked(bool)), this, SLOT(editAdjust())); - connect(logo_input_, SIGNAL(activated(int)), this, SLOT(editLogo())); + connect(logo_input_, qOverload(&QComboBox::activated), this, &TitleBlockTemplateCellWidget::editLogo); updateFormType(TitleBlockCell::TextCell); } From 90950075bfbea33443d7e295ee2700a6d69ceb7e Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sat, 8 Aug 2026 21:39:31 +0200 Subject: [PATCH 11/19] Three connects paired a zero-argument signal with a slot that has a default-valued parameter (e.g. void applyEnable(bool = true)). Default arguments aren't part of a function's pointer-to-member type, so &Class::slot has a type requiring the argument regardless of its default value -- incompatible with a signal providing none, and &Class::slot alone won't compile against these signals at all. When migrating to the modern member pointer connect, replaced with a lambda that calls the slot with no arguments, letting the default apply exactly as before. - SelectAutonumW::applyEnable(bool = true), connected to each NumPartEditorW's changed() signal in both setContext() and on_add_button_clicked(). The corresponding disconnect() in on_remove_button_clicked() is removed rather than reimplemented: a lambda-based connection can't be matched and removed by a separately-written disconnect() call, and the explicit disconnect was already redundant -- the very next line deletes the part object, which Qt automatically disconnects on destruction (the same guarantee setContext()'s own qDeleteAll() cleanup already relies on). - PartText::adjustItemPosition(int = 0), connected to QTextDocument::contentsChanged(). - ExportDialog::slot_changeFilesExtension(bool = false), connected to ExportPropertiesWidget::formatChanged(). --- sources/autoNum/ui/selectautonumw.cpp | 6 +++--- sources/editor/graphicspart/parttext.cpp | 4 ++-- sources/exportdialog.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sources/autoNum/ui/selectautonumw.cpp b/sources/autoNum/ui/selectautonumw.cpp index 7b07477da..1d820fde0 100644 --- a/sources/autoNum/ui/selectautonumw.cpp +++ b/sources/autoNum/ui/selectautonumw.cpp @@ -112,7 +112,7 @@ void SelectAutonumW::setContext(const NumerotationContext &context) else { for (int i=0; i editor_layout -> addWidget(part); } @@ -145,7 +145,7 @@ void SelectAutonumW::on_add_button_clicked() { applyEnable(false); NumPartEditorW *part = new NumPartEditorW(m_edited_type, this); - connect (part, SIGNAL(changed()), this, SLOT(applyEnable())); + connect(part, &NumPartEditorW::changed, this, [this]() { applyEnable(); }); num_part_list_ << part; ui -> editor_layout -> addWidget(part); ui -> remove_button -> setEnabled(true); @@ -160,7 +160,7 @@ void SelectAutonumW::on_remove_button_clicked() //remove if @num_part_list contains more than one item if (num_part_list_.size() > 1) { NumPartEditorW *part = num_part_list_.takeLast(); - disconnect(part, SIGNAL(changed()), this, SLOT(applyEnable())); + // deliberately not disconnecting as not possible to resolve with lambda and will happen automatically when the object "part" is destroyed. delete part; if (num_part_list_.size() == 1) { ui -> remove_button -> setDisabled(true); diff --git a/sources/editor/graphicspart/parttext.cpp b/sources/editor/graphicspart/parttext.cpp index 2154603f4..9af082c9b 100644 --- a/sources/editor/graphicspart/parttext.cpp +++ b/sources/editor/graphicspart/parttext.cpp @@ -55,9 +55,9 @@ PartText::PartText(QETElementEditor *editor, QGraphicsItem *parent) : this, &PartText::adjustItemPosition); connect(document(), - SIGNAL(contentsChanged()), + &QTextDocument::contentsChanged, this, - SLOT(adjustItemPosition())); + [this]() { adjustItemPosition(); }); } /// Destructeur diff --git a/sources/exportdialog.cpp b/sources/exportdialog.cpp index 47eec0f55..58520a8d5 100644 --- a/sources/exportdialog.cpp +++ b/sources/exportdialog.cpp @@ -98,7 +98,7 @@ ExportDialog::ExportDialog( layout -> addWidget(buttons); // connexions signaux/slots - connect(epw, SIGNAL(formatChanged()), this, SLOT(slot_changeFilesExtension())); + connect(epw, &ExportPropertiesWidget::formatChanged, this, [this]() { slot_changeFilesExtension(); }); connect(epw, &ExportPropertiesWidget::exportedAreaChanged, this, &ExportDialog::slot_changeUseBorder); connect(buttons, &QDialogButtonBox::accepted, this, &ExportDialog::slot_export); connect(buttons, &QDialogButtonBox::rejected, this, &ExportDialog::reject); From b3de01d171b9eacc84ca07faa697d46c8eba8de7 Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sat, 8 Aug 2026 21:50:28 +0200 Subject: [PATCH 12/19] Migrating more signal/slot to the new member pointer system. Unlike the earlier signal-side overload fixes (QComboBox/QSpinBox etc.), these three are ambiguous on the *slot* side: activateProject(QETProject*)/activateProject(ProjectView*), closeProject(ProjectView*)/closeProject(QETProject*), and showError(const QETResult&)/showError(const QString&) each have two declarations on QETDiagramEditor. &QETDiagramEditor::activateProject etc. alone won't compile with two candidates present; qOverload() picks the one matching the actual signal's argument type, same as the old SIGNAL()/SLOT() macro text did implicitly. --- sources/qetdiagrameditor.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 32ca046cf..c9665f123 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -179,8 +179,8 @@ void QETDiagramEditor::setUpElementsPanel() addDockWidget(Qt::LeftDockWidgetArea, qdw_pa); - connect(pa, SIGNAL(requestForProject (QETProject *)), this, SLOT(activateProject(QETProject *))); - connect(pa, SIGNAL(requestForProjectClosing (QETProject *)), this, SLOT(closeProject(QETProject *))); + connect(pa, &ElementsPanelWidget::requestForProject, this, qOverload(&QETDiagramEditor::activateProject)); + connect(pa, &ElementsPanelWidget::requestForProjectClosing, this, qOverload(&QETDiagramEditor::closeProject)); connect(pa, SIGNAL(requestForProjectPropertiesEdition (QETProject *)), this, SLOT(editProjectProperties(QETProject *))); connect(pa, &ElementsPanelWidget::requestForNewDiagram, this, &QETDiagramEditor::addDiagramToProject); connect(pa, SIGNAL(requestForDiagramPropertiesEdition (Diagram *)), this, SLOT(editDiagramProperties(Diagram *))); @@ -1933,8 +1933,7 @@ void QETDiagramEditor::addProjectView(ProjectView *project_view) this, &QETDiagramEditor::findElementInPanel); // display error messages sent by the project view - connect(project_view, SIGNAL(errorEncountered(QString)), - this, SLOT(showError(const QString &))); + connect(project_view, &ProjectView::errorEncountered, this, qOverload(&QETDiagramEditor::showError)); //Highlight the current page connect(project_view, &ProjectView::diagramActivated, this, [this](DiagramView *dv) { From f076df77da04d1d8d9c724a9029a6c063b2c0643 Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sat, 8 Aug 2026 21:57:53 +0200 Subject: [PATCH 13/19] Migrating more signal/slot connects to modern system. openTitleBlockTemplate needs a lambda: its matching overload has a default bool argument, so its pointer-to-member type requires two parameters regardless of the default, while the signal provides only one -- no cast alone can both resolve the overload and connect to a single-argument signal. setAutoNum(QString)/setAutoNum(int,int) is a sender-side signal overload which needed a qOverload to match setFolioAutonum's single-argument slot. --- sources/elementspanelwidget.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/elementspanelwidget.cpp b/sources/elementspanelwidget.cpp index 10d07d45e..f4b6e5a15 100644 --- a/sources/elementspanelwidget.cpp +++ b/sources/elementspanelwidget.cpp @@ -120,9 +120,9 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) { connect(elements_panel, &ElementsPanel::customContextMenuRequested, this, &ElementsPanelWidget::handleContextMenu); connect( elements_panel, - SIGNAL(requestForTitleBlockTemplate(const TitleBlockTemplateLocation &)), + &ElementsPanel::requestForTitleBlockTemplate, QETApp::instance(), - SLOT(openTitleBlockTemplate(const TitleBlockTemplateLocation &)) + [app = QETApp::instance()](const TitleBlockTemplateLocation &location) { app->openTitleBlockTemplate(location); } ); // manage double click on TreeWidgetItem From c12137c5a087cf530f79b9b31e761380495ea96d Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sun, 9 Aug 2026 00:13:51 +0200 Subject: [PATCH 14/19] Fixing the connect for requestForNewDiagramAt -- typo during on-the-fly migration during merge. --- sources/qetdiagrameditor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 975227061..fee5b8ace 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -183,7 +183,7 @@ void QETDiagramEditor::setUpElementsPanel() connect(pa, &ElementsPanelWidget::requestForProjectClosing, this, qOverload(&QETDiagramEditor::closeProject)); connect(pa, SIGNAL(requestForProjectPropertiesEdition (QETProject *)), this, SLOT(editProjectProperties(QETProject *))); connect(pa, &ElementsPanelWidget::requestForNewDiagram, this, &QETDiagramEditor::addDiagramToProject); - connect(pa, &ElementsPanelWidget::requestForNewDiagram, this, &QETDiagramEditor::addDiagramToProjectAt); + connect(pa, &ElementsPanelWidget::requestForNewDiagramAt, this, &QETDiagramEditor::addDiagramToProjectAt); connect(pa, SIGNAL(requestForDiagramPropertiesEdition (Diagram *)), this, SLOT(editDiagramProperties(Diagram *))); connect(pa, &ElementsPanelWidget::requestForDiagramsDeletion, this, &QETDiagramEditor::removeDiagrams); connect(pa, &ElementsPanelWidget::requestForDiagramMoveUp, this, &QETDiagramEditor::moveDiagramUp); From 201bd4c5f69c51fcec6fd428e7a8bf55a079fd8a Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sun, 9 Aug 2026 01:34:22 +0200 Subject: [PATCH 15/19] Migration of signal/slot to method pointer continued. Mostly simple cases. --- sources/diagramview.cpp | 8 +-- sources/elementspanelwidget.cpp | 65 ++++++++++------------ sources/exportdialog.cpp | 4 +- sources/qetapp.cpp | 24 ++++---- sources/qetdiagrameditor.cpp | 6 +- sources/qetmainwindow.cpp | 6 +- sources/qtextorientationspinboxwidget.cpp | 4 +- sources/titleblock/qettemplateeditor.cpp | 44 +++++++-------- sources/titleblock/templatecellwidget.cpp | 6 +- sources/titleblock/templatelogomanager.cpp | 13 ++--- sources/titleblock/templateview.cpp | 20 +++---- sources/ui/elementpropertieswidget.cpp | 4 +- sources/ui/projectpropertiesdialog.cpp | 2 +- sources/ui/titleblockpropertieswidget.cpp | 8 +-- sources/undocommand/rotatetextscommand.cpp | 4 +- 15 files changed, 104 insertions(+), 114 deletions(-) diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index 1eea4f80e..c2eb0ff9d 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -79,7 +79,7 @@ DiagramView::DiagramView(Diagram *diagram, QWidget *parent) : m_diagram->loadCndFolioSeq(); m_paste_here = new QAction(QET::Icons::EditPaste, tr("Coller ici", "context menu action"), this); - connect(m_paste_here, SIGNAL(triggered()), this, SLOT(pasteHere())); + connect(m_paste_here, &QAction::triggered, this, &DiagramView::pasteHere); m_multi_paste = new QAction(QET::Icons::EditPaste, tr("Collage multiple"), this); connect(m_multi_paste, &QAction::triggered, [this]() { @@ -89,7 +89,7 @@ DiagramView::DiagramView(Diagram *diagram, QWidget *parent) : // Setup the action to create a template m_create_template = new QAction(tr("Créer un template", "context menu action"), this); - connect(m_create_template, SIGNAL(triggered()), this, SLOT(createTemplateFromSelection())); + connect(m_create_template, &QAction::triggered, this, &DiagramView::createTemplateFromSelection); //setup three separators, to be use in context menu for(int i=0 ; i<3 ; ++i) @@ -98,10 +98,10 @@ DiagramView::DiagramView(Diagram *diagram, QWidget *parent) : m_separators.last()->setSeparator(true); } - connect(m_diagram, SIGNAL(showDiagram(Diagram*)), this, SIGNAL(showDiagram(Diagram*))); + connect(m_diagram, &Diagram::showDiagram, this, &DiagramView::showDiagram); connect(m_diagram, &QGraphicsScene::sceneRectChanged, this, &DiagramView::adjustSceneRect); connect(&(m_diagram -> border_and_titleblock), &BorderTitleBlock::informationChanged, this, &DiagramView::updateWindowTitle); - connect(diagram, SIGNAL(findElementRequired(ElementsLocation)), this, SIGNAL(findElementRequired(ElementsLocation))); + connect(diagram, &Diagram::findElementRequired, this, &DiagramView::findElementRequired); QShortcut *edit_conductor_color_shortcut = new QShortcut(QKeySequence(Qt::Key_F2), this); connect(edit_conductor_color_shortcut, &QShortcut::activated, [this]() diff --git a/sources/elementspanelwidget.cpp b/sources/elementspanelwidget.cpp index 5f42a7a6f..72a4453d8 100644 --- a/sources/elementspanelwidget.cpp +++ b/sources/elementspanelwidget.cpp @@ -96,44 +96,35 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) { context_menu = new QMenu(this); - connect(open_directory, SIGNAL(triggered()), this, SLOT(openDirectoryForSelectedItem())); - connect(copy_path, SIGNAL(triggered()), this, SLOT(copyPathForSelectedItem())); - connect(prj_activate, SIGNAL(triggered()), this, SLOT(activateProject())); - connect(prj_close, SIGNAL(triggered()), this, SLOT(closeProject())); - connect(prj_edit_prop, SIGNAL(triggered()), this, SLOT(editProjectProperties())); - connect(prj_prop_diagram, SIGNAL(triggered()), this, SLOT(editDiagramProperties())); - connect(prj_add_diagram, SIGNAL(triggered()), this, SLOT(newDiagram())); - connect(prj_insert_diagram_above, SIGNAL(triggered()), this, SLOT(insertDiagramAbove())); - connect(prj_insert_diagram_below, SIGNAL(triggered()), this, SLOT(insertDiagramBelow())); - connect(prj_del_diagram, SIGNAL(triggered()), this, SLOT(deleteDiagram())); - connect(prj_duplicate_diagram, SIGNAL(triggered()), this, SLOT(duplicateDiagram())); - connect(prj_move_diagram_up, SIGNAL(triggered()), this, SLOT(moveDiagramUp())); - connect(prj_move_diagram_down, SIGNAL(triggered()), this, SLOT(moveDiagramDown())); - connect(prj_move_diagram_top, SIGNAL(triggered()), this, SLOT(moveDiagramUpTop())); - connect(prj_move_diagram_upx10, SIGNAL(triggered()), this, SLOT(moveDiagramUpx10())); - connect(prj_move_diagram_upx100, SIGNAL(triggered()), this, SLOT(moveDiagramUpx100())); - connect(prj_move_diagram_downx10, SIGNAL(triggered()), this, SLOT(moveDiagramDownx10())); - connect(prj_move_diagram_downx100,SIGNAL(triggered()), this, SLOT(moveDiagramDownx100())); - connect(tbt_add, SIGNAL(triggered()), this, SLOT(addTitleBlockTemplate())); - connect(tbt_edit, SIGNAL(triggered()), this, SLOT(editTitleBlockTemplate())); - connect(tbt_remove, SIGNAL(triggered()), this, SLOT(removeTitleBlockTemplate())); - - connect(filter_textfield, SIGNAL(textChanged(const QString &)), this, SLOT(filterEdited(const QString &))); - - connect(elements_panel, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(updateButtons())); - connect(elements_panel, &ElementsPanel::customContextMenuRequested, this, &ElementsPanelWidget::handleContextMenu); - connect( - elements_panel, - &ElementsPanel::requestForTitleBlockTemplate, - QETApp::instance(), - [app = QETApp::instance()](const TitleBlockTemplateLocation &location) { app->openTitleBlockTemplate(location); } - ); - + connect(open_directory, &QAction::triggered, this, &ElementsPanelWidget::openDirectoryForSelectedItem); + connect(copy_path, &QAction::triggered, this, &ElementsPanelWidget::copyPathForSelectedItem); + connect(prj_activate, &QAction::triggered, this, &ElementsPanelWidget::activateProject); + connect(prj_close, &QAction::triggered, this, &ElementsPanelWidget::closeProject); + connect(prj_edit_prop, &QAction::triggered, this, &ElementsPanelWidget::editProjectProperties); + connect(prj_prop_diagram, &QAction::triggered, this, &ElementsPanelWidget::editDiagramProperties); + connect(prj_add_diagram, &QAction::triggered, this, &ElementsPanelWidget::newDiagram); + connect(prj_insert_diagram_above, &QAction::triggered, this, &ElementsPanelWidget::insertDiagramAbove); + connect(prj_insert_diagram_below, &QAction::triggered, this, &ElementsPanelWidget::insertDiagramBelow); + connect(prj_del_diagram, &QAction::triggered, this, &ElementsPanelWidget::deleteDiagram); + connect(prj_duplicate_diagram, &QAction::triggered, this, &ElementsPanelWidget::duplicateDiagram); + connect(prj_move_diagram_up, &QAction::triggered, this, &ElementsPanelWidget::moveDiagramUp); + connect(prj_move_diagram_down, &QAction::triggered, this, &ElementsPanelWidget::moveDiagramDown); + connect(prj_move_diagram_top, &QAction::triggered, this, &ElementsPanelWidget::moveDiagramUpTop); + connect(prj_move_diagram_upx10, &QAction::triggered, this, &ElementsPanelWidget::moveDiagramUpx10); + connect(prj_move_diagram_upx100, &QAction::triggered, this, &ElementsPanelWidget::moveDiagramUpx100); + connect(prj_move_diagram_downx10, &QAction::triggered, this, &ElementsPanelWidget::moveDiagramDownx10); + connect(prj_move_diagram_downx100, &QAction::triggered, this, &ElementsPanelWidget::moveDiagramDownx100); + connect(tbt_add, &QAction::triggered, this, &ElementsPanelWidget::addTitleBlockTemplate); + connect(tbt_edit, &QAction::triggered, this, &ElementsPanelWidget::editTitleBlockTemplate); + connect(tbt_remove, &QAction::triggered, this, &ElementsPanelWidget::removeTitleBlockTemplate); + connect(filter_textfield, &QLineEdit::textChanged, this, &ElementsPanelWidget::filterEdited); + connect(elements_panel, &ElementsPanel::currentItemChanged, this, &ElementsPanelWidget::updateButtons); + // manage double click on TreeWidgetItem - connect(elements_panel, SIGNAL(requestForProjectPropertiesEdition()), this, SLOT(editProjectProperties()) ); - connect(elements_panel, SIGNAL(requestForDiagramPropertiesEdition()), this, SLOT(editDiagramProperties()) ); - // manage project activation - connect(elements_panel, SIGNAL(requestForProject(QETProject*)), this, SIGNAL(requestForProject(QETProject*))); + connect(elements_panel, &ElementsPanel::requestForProjectPropertiesEdition, this, &ElementsPanelWidget::editProjectProperties); + connect(elements_panel, &ElementsPanel::requestForDiagramPropertiesEdition, this, &ElementsPanelWidget::editDiagramProperties); + // manage project activation + connect(elements_panel, &ElementsPanel::requestForProject, this, &ElementsPanelWidget::requestForProject); // disposition verticale QVBoxLayout *vlayout = new QVBoxLayout(this); diff --git a/sources/exportdialog.cpp b/sources/exportdialog.cpp index 58520a8d5..7e2b9f7ac 100644 --- a/sources/exportdialog.cpp +++ b/sources/exportdialog.cpp @@ -87,8 +87,8 @@ ExportDialog::ExportDialog( deSelectAll -> setText(tr("Tout décocher")); hLayout -> addWidget(selectAll); hLayout -> addWidget(deSelectAll); - connect(selectAll, SIGNAL(clicked()), this, SLOT(slot_selectAllClicked())); - connect(deSelectAll, SIGNAL(clicked()), this, SLOT(slot_deSelectAllClicked())); + connect(selectAll, &QPushButton::clicked, this, &ExportDialog::slot_selectAllClicked); + connect(deSelectAll, &QPushButton::clicked, this, &ExportDialog::slot_deSelectAllClicked); QVBoxLayout *layout = new QVBoxLayout(this); diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index d9880b5b9..21b22c9cc 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -2405,17 +2405,17 @@ void QETApp::initSystemTray() reduce_appli -> setToolTip(tr("Réduire QElectroTech dans le systray")); restore_appli -> setToolTip(tr("Restaurer QElectroTech")); - connect(quitter_qet, SIGNAL(triggered()), this, SLOT(quitQET())); - connect(reduce_appli, SIGNAL(triggered()), this, SLOT(reduceEveryEditor())); - connect(restore_appli, SIGNAL(triggered()), this, SLOT(restoreEveryEditor())); - connect(reduce_diagrams, SIGNAL(triggered()), this, SLOT(reduceDiagramEditors())); - connect(restore_diagrams, SIGNAL(triggered()), this, SLOT(restoreDiagramEditors())); - connect(reduce_elements, SIGNAL(triggered()), this, SLOT(reduceElementEditors())); - connect(restore_elements, SIGNAL(triggered()), this, SLOT(restoreElementEditors())); - connect(reduce_templates, SIGNAL(triggered()), this, SLOT(reduceTitleBlockTemplateEditors())); - connect(restore_templates,SIGNAL(triggered()), this, SLOT(restoreTitleBlockTemplateEditors())); - connect(new_diagram, SIGNAL(triggered()), this, SLOT(newDiagramEditor())); - connect(new_element, SIGNAL(triggered()), this, SLOT(newElementEditor())); + connect(quitter_qet, &QAction::triggered, this, &QETApp::quitQET); + connect(reduce_appli, &QAction::triggered, this, &QETApp::reduceEveryEditor); + connect(restore_appli, &QAction::triggered, this, &QETApp::restoreEveryEditor); + connect(reduce_diagrams, &QAction::triggered, this, &QETApp::reduceDiagramEditors); + connect(restore_diagrams, &QAction::triggered, this, &QETApp::restoreDiagramEditors); + connect(reduce_elements, &QAction::triggered, this, &QETApp::reduceElementEditors); + connect(restore_elements, &QAction::triggered, this, &QETApp::restoreElementEditors); + connect(reduce_templates, &QAction::triggered, this, &QETApp::reduceTitleBlockTemplateEditors); + connect(restore_templates, &QAction::triggered, this, &QETApp::restoreTitleBlockTemplateEditors); + connect(new_diagram, &QAction::triggered, this, &QETApp::newDiagramEditor); + connect(new_element, &QAction::triggered, this, &QETApp::newElementEditor); // initialization of the systray icon // initialisation de l'icone du systray @@ -2441,7 +2441,7 @@ template void QETApp::addWindowsListToMenu( QAction *current_menu = menu -> addAction(window -> windowTitle()); current_menu -> setCheckable(true); current_menu -> setChecked(window -> isVisible()); - connect(current_menu, SIGNAL(triggered()), &signal_map, SLOT(map())); + connect(current_menu, &QAction::triggered, &signal_map, qOverload<>(&QSignalMapper::map)); signal_map.setMapping(current_menu, window); } } diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index fee5b8ace..5f98fe11f 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -181,10 +181,10 @@ void QETDiagramEditor::setUpElementsPanel() connect(pa, &ElementsPanelWidget::requestForProject, this, qOverload(&QETDiagramEditor::activateProject)); connect(pa, &ElementsPanelWidget::requestForProjectClosing, this, qOverload(&QETDiagramEditor::closeProject)); - connect(pa, SIGNAL(requestForProjectPropertiesEdition (QETProject *)), this, SLOT(editProjectProperties(QETProject *))); + connect(pa, &ElementsPanelWidget::requestForProjectPropertiesEdition, this, qOverload(&QETDiagramEditor::editProjectProperties)); connect(pa, &ElementsPanelWidget::requestForNewDiagram, this, &QETDiagramEditor::addDiagramToProject); connect(pa, &ElementsPanelWidget::requestForNewDiagramAt, this, &QETDiagramEditor::addDiagramToProjectAt); - connect(pa, SIGNAL(requestForDiagramPropertiesEdition (Diagram *)), this, SLOT(editDiagramProperties(Diagram *))); + connect(pa, &ElementsPanelWidget::requestForDiagramPropertiesEdition, this, qOverload(&QETDiagramEditor::editDiagramProperties)); connect(pa, &ElementsPanelWidget::requestForDiagramsDeletion, this, &QETDiagramEditor::removeDiagrams); connect(pa, &ElementsPanelWidget::requestForDiagramMoveUp, this, &QETDiagramEditor::moveDiagramUp); connect(pa, &ElementsPanelWidget::requestForDiagramMoveDown, this, &QETDiagramEditor::moveDiagramDown); @@ -2133,7 +2133,7 @@ void QETDiagramEditor::slot_updateWindowsMenu() action -> setStatusTip(QString(tr("Active le projet « %1 »")).arg(pv_title)); action -> setCheckable(true); action -> setChecked(project_view == currentProjectView()); - connect(action, SIGNAL(triggered()), &windowMapper, SLOT(map())); + connect(action, &QAction::triggered, &windowMapper, qOverload<>(&QSignalMapper::map)); windowMapper.setMapping(action, project_view); } } diff --git a/sources/qetmainwindow.cpp b/sources/qetmainwindow.cpp index 8bde0f4af..381fe9912 100644 --- a/sources/qetmainwindow.cpp +++ b/sources/qetmainwindow.cpp @@ -83,13 +83,13 @@ void QETMainWindow::initCommonActions() fullscreen_action_ = new QAction(this); updateFullScreenAction(); - connect(fullscreen_action_, SIGNAL(triggered()), this, SLOT(toggleFullScreen())); + connect(fullscreen_action_, &QAction::triggered, this, &QETMainWindow::toggleFullScreen); whatsthis_action_ = QWhatsThis::createAction(this); about_qet_ = new QAction(QET::Icons::QETLogo, tr("À &propos de QElectroTech"), this); about_qet_ -> setStatusTip(tr("Affiche des informations sur QElectroTech", "status bar tip")); - connect(about_qet_, SIGNAL(triggered()), qet_app, SLOT(aboutQET())); + connect(about_qet_, &QAction::triggered, qet_app, &QETApp::aboutQET); manual_online_ = new QAction(QET::Icons::QETManual, tr("Manuel en ligne"), this); manual_online_ -> setStatusTip(tr("Lance le navigateur par défaut vers le manuel en ligne de QElectroTech", "status bar tip")); @@ -135,7 +135,7 @@ void QETMainWindow::initCommonActions() about_qt_ = new QAction(QET::Icons::QtLogo, tr("À propos de &Qt"), this); about_qt_ -> setStatusTip(tr("Affiche des informations sur la bibliothèque Qt", "status bar tip")); - connect(about_qt_, SIGNAL(triggered()), qApp, SLOT(aboutQt())); + connect(about_qt_, &QAction::triggered, qApp, &QApplication::aboutQt); diagnostics_action_ = new QAction(QET::Icons::DialogInformation, tr("Enregistrer un rapport de diagnostic..."), this); diagnostics_action_ -> setStatusTip(tr("Génère un rapport avec les derniers messages de journalisation, pour l'inclure dans un rapport de bug", "status bar tip")); diff --git a/sources/qtextorientationspinboxwidget.cpp b/sources/qtextorientationspinboxwidget.cpp index c2150fdf6..1b49798a4 100644 --- a/sources/qtextorientationspinboxwidget.cpp +++ b/sources/qtextorientationspinboxwidget.cpp @@ -128,9 +128,9 @@ void QTextOrientationSpinBoxWidget::build() // cliquer sur un des carres du QTextOrientationWidget revient a finir une saisie dans le SpinBox connect(orientation_widget_, - SIGNAL(orientationChanged(double)), + &QTextOrientationWidget::orientationChanged, spin_box_, - SIGNAL(editingFinished())); + &QDoubleSpinBox::editingFinished); // lorsque l'utilisateur a change l'orientation, // on emet un signal avec la valeur de la nouvelle orientation diff --git a/sources/titleblock/qettemplateeditor.cpp b/sources/titleblock/qettemplateeditor.cpp index 65d06cbfc..8b83c4bb3 100644 --- a/sources/titleblock/qettemplateeditor.cpp +++ b/sources/titleblock/qettemplateeditor.cpp @@ -411,26 +411,26 @@ void QETTitleBlockTemplateEditor::initActions() ShortcutManager::instance().registerAction(zoom_fit_, "titleblockeditor.zoom_fit", tr("Éditeur de cartouche"), Qt::CTRL | Qt::Key_9); ShortcutManager::instance().registerAction(zoom_reset_, "titleblockeditor.zoom_reset", tr("Éditeur de cartouche"), Qt::CTRL | Qt::Key_0); - connect(new_, SIGNAL(triggered()), this, SLOT(newTemplate())); - connect(open_, SIGNAL(triggered()), this, SLOT(open())); - connect(open_from_file_, SIGNAL(triggered()), this, SLOT(openFromFile())); - connect(save_, SIGNAL(triggered()), this, SLOT(save())); - connect(save_as_, SIGNAL(triggered()), this, SLOT(saveAs())); - connect(save_as_file_, SIGNAL(triggered()), this, SLOT(saveAsFile())); - connect(quit_, SIGNAL(triggered()), this, SLOT(quit())); - connect(cut_, SIGNAL(triggered()), template_edition_area_view_, SLOT(cut())); - connect(copy_, SIGNAL(triggered()), template_edition_area_view_, SLOT(copy())); - connect(paste_, SIGNAL(triggered()), template_edition_area_view_, SLOT(paste())); - connect(zoom_in_, SIGNAL(triggered()), template_edition_area_view_, SLOT(zoomIn())); - connect(zoom_out_, SIGNAL(triggered()), template_edition_area_view_, SLOT(zoomOut())); - connect(zoom_fit_, SIGNAL(triggered()), template_edition_area_view_, SLOT(zoomFit())); - connect(zoom_reset_, SIGNAL(triggered()), template_edition_area_view_, SLOT(zoomReset())); - connect(edit_logos_, SIGNAL(triggered()), this, SLOT(editLogos())); - connect(edit_info_, SIGNAL(triggered()), this, SLOT(editTemplateInformation())); - connect(add_row_, SIGNAL(triggered()), template_edition_area_view_, SLOT(addRowAtEnd())); - connect(add_col_, SIGNAL(triggered()), template_edition_area_view_, SLOT(addColumnAtEnd())); - connect(merge_cells_, SIGNAL(triggered()), template_edition_area_view_, SLOT(mergeSelectedCells())); - connect(split_cell_, SIGNAL(triggered()), template_edition_area_view_, SLOT(splitSelectedCell())); + connect(new_, &QAction::triggered, this, &QETTitleBlockTemplateEditor::newTemplate); + connect(open_, &QAction::triggered, this, &QETTitleBlockTemplateEditor::open); + connect(open_from_file_, &QAction::triggered, this, &QETTitleBlockTemplateEditor::openFromFile); + connect(save_, &QAction::triggered, this, &QETTitleBlockTemplateEditor::save); + connect(save_as_, &QAction::triggered, this, qOverload<>(&QETTitleBlockTemplateEditor::saveAs)); + connect(save_as_file_, &QAction::triggered, this, &QETTitleBlockTemplateEditor::saveAsFile); + connect(quit_, &QAction::triggered, this, &QETTitleBlockTemplateEditor::quit); + connect(cut_, &QAction::triggered, template_edition_area_view_, &TitleBlockTemplateView::cut); + connect(copy_, &QAction::triggered, template_edition_area_view_, &TitleBlockTemplateView::copy); + connect(paste_, &QAction::triggered, template_edition_area_view_, &TitleBlockTemplateView::paste); + connect(zoom_in_, &QAction::triggered, template_edition_area_view_, &TitleBlockTemplateView::zoomIn); + connect(zoom_out_, &QAction::triggered, template_edition_area_view_, &TitleBlockTemplateView::zoomOut); + connect(zoom_fit_, &QAction::triggered, template_edition_area_view_, &TitleBlockTemplateView::zoomFit); + connect(zoom_reset_, &QAction::triggered, template_edition_area_view_, &TitleBlockTemplateView::zoomReset); + connect(edit_logos_, &QAction::triggered, this, &QETTitleBlockTemplateEditor::editLogos); + connect(edit_info_, &QAction::triggered, this, &QETTitleBlockTemplateEditor::editTemplateInformation); + connect(add_row_, &QAction::triggered, template_edition_area_view_, &TitleBlockTemplateView::addRowAtEnd); + connect(add_col_, &QAction::triggered, template_edition_area_view_, &TitleBlockTemplateView::addColumnAtEnd); + connect(merge_cells_, &QAction::triggered, template_edition_area_view_, &TitleBlockTemplateView::mergeSelectedCells); + connect(split_cell_, &QAction::triggered, template_edition_area_view_, &TitleBlockTemplateView::splitSelectedCell); } /** @@ -595,9 +595,9 @@ void QETTitleBlockTemplateEditor::initLogoManager() logo_manager_ -> setReadOnly(read_only_); connect( logo_manager_, - SIGNAL(logosChanged(const TitleBlockTemplate *)), + &TitleBlockTemplateLogoManager::logosChanged, template_cell_editor_widget_, - SLOT(updateLogosComboBox(const TitleBlockTemplate *)) + &TitleBlockTemplateCellWidget::updateLogosComboBox ); } diff --git a/sources/titleblock/templatecellwidget.cpp b/sources/titleblock/templatecellwidget.cpp index c9068d140..70c5ce371 100644 --- a/sources/titleblock/templatecellwidget.cpp +++ b/sources/titleblock/templatecellwidget.cpp @@ -145,19 +145,19 @@ void TitleBlockTemplateCellWidget::initWidgets() setLayout(cell_editor_layout_); // trigger the logo manager - connect(add_logo_input_, SIGNAL(released()), this, SIGNAL(logoEditionRequested())); + connect(add_logo_input_, &QPushButton::released, this, &TitleBlockTemplateCellWidget::logoEditionRequested); // handle cell modifications connect(cell_type_input_, qOverload(&QComboBox::activated), this, &TitleBlockTemplateCellWidget::updateFormType); connect(cell_type_input_, qOverload(&QComboBox::activated), this, &TitleBlockTemplateCellWidget::editType); connect(name_input_, &QLineEdit::editingFinished, this, &TitleBlockTemplateCellWidget::editName); - connect(label_checkbox_, SIGNAL(clicked(bool)), this, SLOT(editLabelDisplayed())); + connect(label_checkbox_, &QCheckBox::clicked, this, &TitleBlockTemplateCellWidget::editLabelDisplayed); connect(label_edit_, &QPushButton::released, this, &TitleBlockTemplateCellWidget::editLabel); connect(value_edit_, &QPushButton::released, this, &TitleBlockTemplateCellWidget::editValue); connect(horiz_align_input_, qOverload(&QComboBox::activated), this, &TitleBlockTemplateCellWidget::editAlignment); connect(vert_align_input_, qOverload(&QComboBox::activated), this, &TitleBlockTemplateCellWidget::editAlignment); connect(font_size_input_, qOverload(&QSpinBox::valueChanged), this, &TitleBlockTemplateCellWidget::editFontSize); - connect(font_adjust_input_, SIGNAL(clicked(bool)), this, SLOT(editAdjust())); + connect(font_adjust_input_, &QCheckBox::clicked, this, &TitleBlockTemplateCellWidget::editAdjust); connect(logo_input_, qOverload(&QComboBox::activated), this, &TitleBlockTemplateCellWidget::editLogo); updateFormType(TitleBlockCell::TextCell); diff --git a/sources/titleblock/templatelogomanager.cpp b/sources/titleblock/templatelogomanager.cpp index c9ca7a36b..8a0df8e4f 100644 --- a/sources/titleblock/templatelogomanager.cpp +++ b/sources/titleblock/templatelogomanager.cpp @@ -123,11 +123,10 @@ void TitleBlockTemplateLogoManager::initWidgets() vlayout0_ -> addWidget(logo_box_); setLayout(vlayout0_); - connect( - logos_view_, - SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), + connect(logos_view_, + &QListWidget::currentItemChanged, this, - SLOT(updateLogoInformations(QListWidgetItem *, QListWidgetItem *)) + &TitleBlockTemplateLogoManager::updateLogoInformations ); connect(add_button_, &QPushButton::released, this, &TitleBlockTemplateLogoManager::addLogo); connect(export_button_, &QPushButton::released, this, &TitleBlockTemplateLogoManager::exportLogo); @@ -214,9 +213,9 @@ QString TitleBlockTemplateLogoManager::confirmLogoName(const QString &initial_na signal_mapper -> setMapping(replace_button, QDialogButtonBox::YesRole); signal_mapper -> setMapping(rename_button, QDialogButtonBox::NoRole); signal_mapper -> setMapping(cancel_button, QDialogButtonBox::RejectRole); - connect(replace_button, SIGNAL(clicked()), signal_mapper, SLOT(map())); - connect(rename_button, SIGNAL(clicked()), signal_mapper, SLOT(map())); - connect(cancel_button, SIGNAL(clicked()), signal_mapper, SLOT(map())); + connect(replace_button, &QPushButton::clicked, signal_mapper, qOverload<>(&QSignalMapper::map)); + connect(rename_button, &QPushButton::clicked, signal_mapper, qOverload<>(&QSignalMapper::map)); + connect(cancel_button, &QPushButton::clicked, signal_mapper, qOverload<>(&QSignalMapper::map)); #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) // TODO Qt6 only: remove, mappedInt() always available connect(signal_mapper, SIGNAL(mapped(int)), rename_dialog, SLOT(done(int))); diff --git a/sources/titleblock/templateview.cpp b/sources/titleblock/templateview.cpp index ca5f5421b..a9965f53d 100644 --- a/sources/titleblock/templateview.cpp +++ b/sources/titleblock/templateview.cpp @@ -584,15 +584,15 @@ void TitleBlockTemplateView::init() delete_row_ = new QAction(QET::Icons::EditTableDeleteRow, tr("Supprimer cette ligne", "context menu"), this); change_preview_width_ = new QAction( tr("Modifier la largeur de cet aperçu", "context menu"), this); - connect(add_column_before_, SIGNAL(triggered()), this, SLOT(addColumnBefore())); - connect(add_row_before_, SIGNAL(triggered()), this, SLOT(addRowBefore())); - connect(add_column_after_, SIGNAL(triggered()), this, SLOT(addColumnAfter())); - connect(add_row_after_, SIGNAL(triggered()), this, SLOT(addRowAfter())); - connect(edit_column_dim_, SIGNAL(triggered()), this, SLOT(editColumn())); - connect(edit_row_dim_, SIGNAL(triggered()), this, SLOT(editRow())); - connect(delete_column_, SIGNAL(triggered()), this, SLOT(deleteColumn())); - connect(delete_row_, SIGNAL(triggered()), this, SLOT(deleteRow())); - connect(change_preview_width_, SIGNAL(triggered()), this, SLOT(changePreviewWidth())); + connect(add_column_before_, &QAction::triggered, this, &TitleBlockTemplateView::addColumnBefore); + connect(add_row_before_, &QAction::triggered, this, &TitleBlockTemplateView::addRowBefore); + connect(add_column_after_, &QAction::triggered, this, &TitleBlockTemplateView::addColumnAfter); + connect(add_row_after_, &QAction::triggered, this, &TitleBlockTemplateView::addRowAfter); + connect(edit_column_dim_, &QAction::triggered, this, [this]() { editColumn(); }); + connect(edit_row_dim_, &QAction::triggered, this, [this]() { editRow(); }); + connect(delete_column_, &QAction::triggered, this, &TitleBlockTemplateView::deleteColumn); + connect(delete_row_, &QAction::triggered, this, &TitleBlockTemplateView::deleteRow); + connect(change_preview_width_, &QAction::triggered, this, &TitleBlockTemplateView::changePreviewWidth); setTransformationAnchor(QGraphicsView::AnchorUnderMouse); setBackgroundBrush(QBrush(QColor(248, 255, 160))); @@ -691,7 +691,7 @@ void TitleBlockTemplateView::applyRowsHeights(bool animate) { animation -> setStartValue(QVariant(tbgrid_ -> rowMinimumHeight(ROW_OFFSET + i))); animation -> setEndValue(QVariant(1.0 * heights.at(i))); animation -> setDuration(500); - connect(animation, SIGNAL(finished()), this, SLOT(updateRowsHelperCells())); + connect(animation, &GridLayoutAnimation::finished, this, &TitleBlockTemplateView::updateRowsHelperCells); animation -> start(QAbstractAnimation::DeleteWhenStopped); } diff --git a/sources/ui/elementpropertieswidget.cpp b/sources/ui/elementpropertieswidget.cpp index 870984bdd..47a5b482a 100644 --- a/sources/ui/elementpropertieswidget.cpp +++ b/sources/ui/elementpropertieswidget.cpp @@ -403,9 +403,9 @@ QWidget *ElementPropertiesWidget::generalWidget() //button widget QPushButton *find_in_panel = new QPushButton(QET::Icons::ZoomDraw, tr("Retrouver dans le panel"), general_widget); - connect(find_in_panel, SIGNAL(clicked()), this, SLOT(findInPanel())); + connect(find_in_panel, &QPushButton::clicked, this, &ElementPropertiesWidget::findInPanel); QPushButton *edit_element = new QPushButton(QET::Icons::ElementEdit, tr("Éditer l'élément"), general_widget); - connect(edit_element, SIGNAL(clicked()), this, SLOT(editElement())); + connect(edit_element, &QPushButton::clicked, this, &ElementPropertiesWidget::editElement); QHBoxLayout *hlayout_ = new QHBoxLayout; hlayout_->addWidget(find_in_panel); hlayout_->addWidget(edit_element); diff --git a/sources/ui/projectpropertiesdialog.cpp b/sources/ui/projectpropertiesdialog.cpp index 28dfc07c0..f427d923e 100644 --- a/sources/ui/projectpropertiesdialog.cpp +++ b/sources/ui/projectpropertiesdialog.cpp @@ -44,7 +44,7 @@ ProjectPropertiesDialog::ProjectPropertiesDialog(QETProject *project, QWidget *p m_properties_dialog->addPage(new TerminalStripProjectConfigPage { project, parent }); - connect(projectAutoNumConfigPage,SIGNAL(setAutoNum(QString)),newDiagramPage,SLOT(setFolioAutonum(QString))); + connect(projectAutoNumConfigPage, qOverload(&ProjectAutoNumConfigPage::setAutoNum), newDiagramPage, &NewDiagramPage::setFolioAutonum); connect(projectAutoNumConfigPage, &ProjectAutoNumConfigPage::saveCurrentTbp, newDiagramPage, &NewDiagramPage::saveCurrentTbp); connect(projectAutoNumConfigPage, &ProjectAutoNumConfigPage::loadSavedTbp, newDiagramPage, &NewDiagramPage::loadSavedTbp); } diff --git a/sources/ui/titleblockpropertieswidget.cpp b/sources/ui/titleblockpropertieswidget.cpp index ae6cb2d1b..b3ff972cc 100644 --- a/sources/ui/titleblockpropertieswidget.cpp +++ b/sources/ui/titleblockpropertieswidget.cpp @@ -353,13 +353,13 @@ void TitleBlockPropertiesWidget::initDialog( this); connect(m_tbt_edit, - SIGNAL(triggered()), + &QAction::triggered, this, - SLOT(editCurrentTitleBlockTemplate())); + &TitleBlockPropertiesWidget::editCurrentTitleBlockTemplate); connect(m_tbt_duplicate, - SIGNAL(triggered()), + &QAction::triggered, this, - SLOT(duplicateCurrentTitleBlockTemplate())); + &TitleBlockPropertiesWidget::duplicateCurrentTitleBlockTemplate); m_tbt_menu = new QMenu(tr("Title block templates actions"), ui->m_tbt_pb); m_tbt_menu -> addAction(m_tbt_edit); diff --git a/sources/undocommand/rotatetextscommand.cpp b/sources/undocommand/rotatetextscommand.cpp index 929507e48..f2248479f 100644 --- a/sources/undocommand/rotatetextscommand.cpp +++ b/sources/undocommand/rotatetextscommand.cpp @@ -120,8 +120,8 @@ void RotateTextsCommand::openDialog() ori_widget->spinBox()->selectAll(); QDialogButtonBox buttons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - QObject::connect(&buttons, SIGNAL(accepted()), &ori_text_dialog, SLOT(accept())); - QObject::connect(&buttons, SIGNAL(rejected()), &ori_text_dialog, SLOT(reject())); + QObject::connect(&buttons, &QDialogButtonBox::accepted, &ori_text_dialog, &QDialog::accept); + QObject::connect(&buttons, &QDialogButtonBox::rejected, &ori_text_dialog, &QDialog::reject); QVBoxLayout layout_v(&ori_text_dialog); layout_v.setSizeConstraint(QLayout::SetFixedSize); From fca1e0993b392bb14fcc98f251845c3b752cda96 Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sun, 9 Aug 2026 11:51:23 +0200 Subject: [PATCH 16/19] Remaining signal/slot migration and clean-up after the latest merge. --- sources/autoNum/ui/autonumberingdockwidget.cpp | 13 ++++--------- sources/elementspanel.cpp | 2 +- sources/qetapp.cpp | 2 +- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/sources/autoNum/ui/autonumberingdockwidget.cpp b/sources/autoNum/ui/autonumberingdockwidget.cpp index d27a5042f..39f0aa985 100644 --- a/sources/autoNum/ui/autonumberingdockwidget.cpp +++ b/sources/autoNum/ui/autonumberingdockwidget.cpp @@ -123,10 +123,8 @@ void AutoNumberingDockWidget::setProject(QETProject *project, disconnect(m_project, &QETProject::elementAutoNumAdded, this, &AutoNumberingDockWidget::elementAutoNumChanged); //Folio Signals - disconnect (m_project,SIGNAL(folioAutoNumRemoved()), - this,SLOT(folioAutoNumChanged())); - disconnect (m_project,SIGNAL(folioAutoNumAdded()), - this,SLOT(folioAutoNumChanged())); + disconnect(m_project, &QETProject::folioAutoNumRemoved, this, qOverload<>(&AutoNumberingDockWidget::folioAutoNumChanged)); + disconnect(m_project, &QETProject::folioAutoNumAdded, this, qOverload<>(&AutoNumberingDockWidget::folioAutoNumChanged)); disconnect(m_project, &QETProject::defaultTitleBlockPropertiesChanged, this, &AutoNumberingDockWidget::setActive); //Conductor, Element and Folio Signals @@ -150,10 +148,8 @@ void AutoNumberingDockWidget::setProject(QETProject *project, connect(m_project, &QETProject::elementAutoNumAdded, this, &AutoNumberingDockWidget::elementAutoNumChanged); //Folio Signals - connect (m_project,SIGNAL(folioAutoNumRemoved()), - this,SLOT(folioAutoNumChanged())); - connect (m_project,SIGNAL(folioAutoNumAdded()), - this,SLOT(folioAutoNumChanged())); + connect(m_project, &QETProject::folioAutoNumRemoved, this, qOverload<>(&AutoNumberingDockWidget::folioAutoNumChanged)); + connect(m_project, &QETProject::folioAutoNumAdded, this, qOverload<>(&AutoNumberingDockWidget::folioAutoNumChanged)); connect(m_project, &QETProject::defaultTitleBlockPropertiesChanged, this, &AutoNumberingDockWidget::setActive); //Conductor, Element and Folio Signals @@ -358,7 +354,6 @@ void AutoNumberingDockWidget::on_m_folio_cb_activated(int) { if (new_properties != old_properties) diagram->undoStack().push(new ChangeTitleBlockCommand(diagram, old_properties, new_properties)); } - emit(folioAutoNumChanged(current_autonum)); refreshRow(AutoNumCategory::Folio); } diff --git a/sources/elementspanel.cpp b/sources/elementspanel.cpp index 09f12cf96..9e20e2f37 100644 --- a/sources/elementspanel.cpp +++ b/sources/elementspanel.cpp @@ -75,7 +75,7 @@ ElementsPanel::ElementsPanel(QWidget *parent) : // we handle double click on items ourselves connect(this, &ElementsPanel::itemDoubleClicked, this, &ElementsPanel::slot_doubleClick); - connect(this, &GenericPanel::firstActivated, [this]() {QTimer::singleShot(250, this, SLOT(reload()));}); + connect(this, &GenericPanel::firstActivated, [this]() {QTimer::singleShot(250, this, &ElementsPanel::reload);}); connect(this, &ElementsPanel::panelContentChanged, this, &ElementsPanel::panelContentChange); // manage signal itemClicked diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index 21b22c9cc..95d84a4d0 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -1796,7 +1796,7 @@ void QETApp::checkRemainingWindows() */ static bool sleep = true; if (sleep) { - QTimer::singleShot(500, this, SLOT(checkRemainingWindows())); + QTimer::singleShot(500, this, &QETApp::checkRemainingWindows); } else { if (!diagramEditors().count() && !elementEditors().count()) { qApp->quit(); From c7ed3229d028f630ef1ce77b1ed6b7250ee06bd6 Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sun, 9 Aug 2026 12:30:15 +0200 Subject: [PATCH 17/19] Migrating more SLOT() macros. --- sources/autoNum/ui/autonumberingdockwidget.h | 1 - sources/editor/ui/qetelementeditor.cpp | 2 +- sources/genericpanel.cpp | 2 +- sources/qetdiagrameditor.cpp | 2 +- sources/titleblock/qettemplateeditor.cpp | 2 +- sources/titleblock/templateview.cpp | 2 +- sources/ui/elementinfowidget.cpp | 2 +- sources/ui/linksingleelementwidget.cpp | 2 +- sources/ui/masterpropertieswidget.cpp | 2 +- 9 files changed, 8 insertions(+), 9 deletions(-) diff --git a/sources/autoNum/ui/autonumberingdockwidget.h b/sources/autoNum/ui/autonumberingdockwidget.h index 5e86610e1..8472439bf 100644 --- a/sources/autoNum/ui/autonumberingdockwidget.h +++ b/sources/autoNum/ui/autonumberingdockwidget.h @@ -72,7 +72,6 @@ class AutoNumberingDockWidget : public QDockWidget void on_m_folio_increase_sb_valueChanged(int); signals: - void folioAutoNumChanged(QString); private: enum class AutoNumCategory { Conductor, Element, Folio }; diff --git a/sources/editor/ui/qetelementeditor.cpp b/sources/editor/ui/qetelementeditor.cpp index 9a4eb2ffb..3febab0d9 100644 --- a/sources/editor/ui/qetelementeditor.cpp +++ b/sources/editor/ui/qetelementeditor.cpp @@ -848,7 +848,7 @@ bool QETElementEditor::event(QEvent *event) { if (m_first_activation && event->type() == QEvent::WindowActivate) { m_first_activation = false; - QTimer::singleShot(250, m_view, SLOT(zoomFit())); + QTimer::singleShot(250, m_view, &ElementView::zoomFit); } return QMainWindow::event(event); diff --git a/sources/genericpanel.cpp b/sources/genericpanel.cpp index dbb856b75..71248faa1 100644 --- a/sources/genericpanel.cpp +++ b/sources/genericpanel.cpp @@ -1033,7 +1033,7 @@ bool GenericPanel::event(QEvent *event) { if (first_activation_) { if (event -> type() == QEvent::WindowActivate || event -> type() == QEvent::Show) { - QTimer::singleShot(250, this, SLOT(emitFirstActivated())); + QTimer::singleShot(250, this, &GenericPanel::emitFirstActivated); first_activation_ = false; } } diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 5f98fe11f..ac5656af8 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -983,7 +983,7 @@ bool QETDiagramEditor::event(QEvent *e) if (m_first_show && e->type() == QEvent::WindowActivate) { m_first_show = false; - QTimer::singleShot(250, m_element_collection_widget, SLOT(reload())); + QTimer::singleShot(250, m_element_collection_widget, &ElementsCollectionWidget::reload); } return(QETMainWindow::event(e)); } diff --git a/sources/titleblock/qettemplateeditor.cpp b/sources/titleblock/qettemplateeditor.cpp index 8b83c4bb3..9dd025132 100644 --- a/sources/titleblock/qettemplateeditor.cpp +++ b/sources/titleblock/qettemplateeditor.cpp @@ -142,7 +142,7 @@ void QETTitleBlockTemplateEditor::firstActivation(QEvent *event) Q_UNUSED(event) if (duplicate_ && !opened_from_file_ && location_.parentCollection()) { // this editor is supposed to duplicate its current location - QTimer::singleShot(250, this, SLOT(duplicateCurrentLocation())); + QTimer::singleShot(250, this, &QETTitleBlockTemplateEditor::duplicateCurrentLocation); } } diff --git a/sources/titleblock/templateview.cpp b/sources/titleblock/templateview.cpp index c1719b52d..644f3239b 100644 --- a/sources/titleblock/templateview.cpp +++ b/sources/titleblock/templateview.cpp @@ -863,7 +863,7 @@ void TitleBlockTemplateView::fillWithEmptyCells() */ bool TitleBlockTemplateView::event(QEvent *event) { if (first_activation_ && event -> type() == QEvent::WindowActivate) { - QTimer::singleShot(250, this, SLOT(zoomFit())); + QTimer::singleShot(250, this, &TitleBlockTemplateView::zoomFit); first_activation_ = false; } return(QGraphicsView::event(event)); diff --git a/sources/ui/elementinfowidget.cpp b/sources/ui/elementinfowidget.cpp index a566643c5..0b8a41111 100644 --- a/sources/ui/elementinfowidget.cpp +++ b/sources/ui/elementinfowidget.cpp @@ -148,7 +148,7 @@ bool ElementInfoWidget::event(QEvent *event) { if (event -> type() == QEvent::WindowActivate || event -> type() == QEvent::Show) { - QTimer::singleShot(250, this, SLOT(firstActivated())); + QTimer::singleShot(250, this, &ElementInfoWidget::firstActivated); m_first_activation = false; } } diff --git a/sources/ui/linksingleelementwidget.cpp b/sources/ui/linksingleelementwidget.cpp index 08c65cc55..026ca251d 100644 --- a/sources/ui/linksingleelementwidget.cpp +++ b/sources/ui/linksingleelementwidget.cpp @@ -528,7 +528,7 @@ void LinkSingleElementWidget::diagramWasRemovedFromProject() // contains the master element linked to the edited element // we must wait for this elements to be unlinked, // or else the list of available master isn't up to date - QTimer::singleShot(10, this, SLOT(updateUi())); + QTimer::singleShot(10, this, &LinkSingleElementWidget::updateUi); } void LinkSingleElementWidget::showedElementWasDeleted() diff --git a/sources/ui/masterpropertieswidget.cpp b/sources/ui/masterpropertieswidget.cpp index 0457fadb6..2924f0549 100644 --- a/sources/ui/masterpropertieswidget.cpp +++ b/sources/ui/masterpropertieswidget.cpp @@ -427,7 +427,7 @@ void MasterPropertiesWidget::diagramWasdeletedFromProject() // contains slave element linked to the edited element // we must wait for this elements be unlinked, // or else the linked list provides deleted elements. - QTimer::singleShot(10, this, SLOT(updateUi())); + QTimer::singleShot(10, this, &MasterPropertiesWidget::updateUi); } /** From b91aaacad9b7feca6575866e31f64082d7665642 Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sun, 9 Aug 2026 19:25:56 +0200 Subject: [PATCH 18/19] Re-adding connects (migrated) which got lost unfortunately during the migration and repeated merging. --- sources/elementspanelwidget.cpp | 7 +++++++ sources/exportpropertieswidget.cpp | 2 ++ 2 files changed, 9 insertions(+) diff --git a/sources/elementspanelwidget.cpp b/sources/elementspanelwidget.cpp index 72a4453d8..129e49512 100644 --- a/sources/elementspanelwidget.cpp +++ b/sources/elementspanelwidget.cpp @@ -119,6 +119,13 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) { connect(tbt_remove, &QAction::triggered, this, &ElementsPanelWidget::removeTitleBlockTemplate); connect(filter_textfield, &QLineEdit::textChanged, this, &ElementsPanelWidget::filterEdited); connect(elements_panel, &ElementsPanel::currentItemChanged, this, &ElementsPanelWidget::updateButtons); + connect(elements_panel, &ElementsPanel::customContextMenuRequested, this, &ElementsPanelWidget::handleContextMenu); + connect( + elements_panel, + &ElementsPanel::requestForTitleBlockTemplate, + QETApp::instance(), + [app = QETApp::instance()](const TitleBlockTemplateLocation &location) { app->openTitleBlockTemplate(location); } + ); // manage double click on TreeWidgetItem connect(elements_panel, &ElementsPanel::requestForProjectPropertiesEdition, this, &ElementsPanelWidget::editProjectProperties); diff --git a/sources/exportpropertieswidget.cpp b/sources/exportpropertieswidget.cpp index bd5b1a140..8eccc0805 100644 --- a/sources/exportpropertieswidget.cpp +++ b/sources/exportpropertieswidget.cpp @@ -246,6 +246,7 @@ void ExportPropertiesWidget::build() connect(draw_border, &QCheckBox::stateChanged, this, &ExportPropertiesWidget::optionChanged); connect(draw_titleblock, &QCheckBox::stateChanged, this, &ExportPropertiesWidget::optionChanged); connect(draw_terminals, &QCheckBox::stateChanged, this, &ExportPropertiesWidget::optionChanged); + connect(draw_terminal_names, &QCheckBox::stateChanged, this, &ExportPropertiesWidget::optionChanged); connect(draw_bg_transparent, &QCheckBox::stateChanged, this, &ExportPropertiesWidget::optionChanged); connect(draw_colored_conductors, &QCheckBox::stateChanged, this, &ExportPropertiesWidget::optionChanged); #else @@ -253,6 +254,7 @@ void ExportPropertiesWidget::build() connect(draw_border, &QCheckBox::checkStateChanged, this, &ExportPropertiesWidget::optionChanged); connect(draw_titleblock, &QCheckBox::checkStateChanged, this, &ExportPropertiesWidget::optionChanged); connect(draw_terminals, &QCheckBox::checkStateChanged, this, &ExportPropertiesWidget::optionChanged); + connect(draw_terminal_names, &QCheckBox::checkStateChanged, this, &ExportPropertiesWidget::optionChanged); connect(draw_bg_transparent, &QCheckBox::checkStateChanged, this, &ExportPropertiesWidget::optionChanged); connect(draw_colored_conductors, &QCheckBox::checkStateChanged, this, &ExportPropertiesWidget::optionChanged); #endif From 7cb1e7394e4df55d406479566a961d58d861bd3f Mon Sep 17 00:00:00 2001 From: Andre Rummler Date: Sun, 9 Aug 2026 19:35:55 +0200 Subject: [PATCH 19/19] Revert accidental German translation changes --- lang/qet_de.qm | Bin 341902 -> 359203 bytes lang/qet_de.ts | 289 +++++++++++++++++++++++++------------------------ 2 files changed, 145 insertions(+), 144 deletions(-) diff --git a/lang/qet_de.qm b/lang/qet_de.qm index e37d5a2016baa5d0a4362984d7d48c9361d62697..ee110f2a3ed556b526d709bc2310c192e2061a9d 100644 GIT binary patch delta 33741 zcmXV&2Uyfv6NV=_C)wR>cCmn6Kooli>>aQ-R8%ZjQS1t0*Huxm7pfgp5L5)cV!?`v zV(-|mV!_@(z1aOflK(!>ectS{yGhQOGxN>Ni7P+aZ~M<-b$MG~!haQsx-A1;NeIi+ z$Wvc{HHfyf25W&+z`7({z=odxI}b(3vuU$Ymb!EEl56 znIx|It@HOjqAIw^Ek>fM9wh#8!T>cTsq_(|dRC&*dx+YH5;Nf9L4M&DQRjH#GoFJf z#KPKP;KE6)jPv#CN|byPv~4Ex!XJ8VCbsShk?%kv|1~;O>S~lq)CB#B8sLP!@fiAQ zM7`(X|93hMUf0MM#DVGfTqmM_O-NW6uQU3OM!oQHUsrX}}K-}3>4E?CnL|rffL1`p3-lmZ!wjv7dLsWbyQOH1Iwr)f- z>JbfE2I4mdWr3K^!3@L&Ec79oS;(1Wqc2}bEIWk+zhI&w%Sa6VgCD*@;^Ju-;%JTh ztAY6PeI&SV)5upHAs&8)IP)YPokUd0j(Ac6G5b=)Q|Ayb+lKfxZ{n43ml$PnXCLCX zSHQl1>TFa}XPd@0{a|2go&LXcj(w+d-v8g8xYa>GA)+ z_ritY#KP>#Iv0=Exw^K_EjIm%gzdQU!VjiB*Li%8&MTF4J{q9&Qwfc1cXyrpuxRi- zc3Qsx_TiNN`ak``d5C^OKC_7SK9A6EgvT||U)y#D=?5pKX_PEpIvsFf_h5{b-HE@# z(D(WdW)i=S6TfD}n^q&K#x0VpR+2m(4JBdpYmzboh&ol#*>{l6 z^wS!J#=$xd-O>5*iAEM=)){Bhnb%0?uSXhrq8&-6o7ix|wj^a1o_GRDmm-N{`AJt3 zh(8S=c~&e5J3o;DcgSW9Aw#3XBuqR+hE`?3*JQvQv3YICaMYQEqi@N83uU1t$Z#fw z#4aOrZW*fctwM%N_}sB_WUS&qY{hvp6}OEimd;46D-o3mAgga(V!!WE@uzVlsI$nS zax~2M9hHo`L)_%lD!4P*-m

CSo>q80AgO+?YDd#0MrR)FA_rt5Qem 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 Réinitialiser à la valeur de départ - + Auf den Ausgangswert zurücksetzen Valeur actuelle du compteur. Saisir une nouvelle valeur et valider pour la modifier. - + Aktueller Zählerstand. Geben Sie einen neuen Wert ein und bestätigen Sie, um ihn zu ändern. @@ -548,7 +548,7 @@ Autonumérotation - Automatische Nummerierung: + Automatische Nummerierung @@ -1283,12 +1283,12 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren. Lettres minuscules, chiffres, tiret et underscore uniquement - + Nur Kleinbuchstaben, Ziffern, Bindestriche und Unterstriche Supprimer cette propriété - + Diese Eigenschaft löschen @@ -1296,27 +1296,27 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren. Enregistrer... - + Speichern... Enregistrer le rapport de diagnostic - + Diagnosebericht speichern Fichiers texte (*.txt);;Tous les fichiers (*) - + Textdateien (*.txt);;Alle Dateien (*) Erreur - Fehler + Fehler Impossible d'écrire dans le fichier « %1 ». - + Die Datei „%1“ kann nicht beschrieben werden. @@ -2011,7 +2011,7 @@ Bemerkung: diese Optionen verhindern NICHT das automatische Nummerieren. Numéroter automatiquement un élément undo caption - + Ein Element automatisch nummerieren @@ -2199,7 +2199,7 @@ Der angezeigte Name des Elements lässt sich separat in den Eigenschaften des El Ajouter une propriété personnalisée - + Benutzerdefinierte Eigenschaft hinzufügen @@ -2383,7 +2383,7 @@ Der angezeigte Name des Elements lässt sich separat in den Eigenschaften des El Esclave PLC - + SPS-Slave @@ -2427,7 +2427,7 @@ Der angezeigte Name des Elements lässt sich separat in den Eigenschaften des El Module PLC - + SPS-Modul @@ -2477,138 +2477,138 @@ Der angezeigte Name des Elements lässt sich separat in den Eigenschaften des El Configuration PLC - + SPS-Konfiguration + - + + - - + - Adresse - + Adresse Commentaire - Kommentar + Kommentar Réf. croisée - + Querverweis Nb. - + Anzahl T1 - + T1 Police des en-têtes - + Schriftart der Überschriften Configurer la police des en-têtes de colonnes - + Schriftart für Spaltenüberschriften festlegen Police du texte - + Schriftart des Textes Configurer la police du texte dans les cellules - + Schriftart des Textes in den Zellen festlegen Afficher les en-têtes sur la feuille - + Kopfzeilen auf dem Blatt anzeigen Afficher ou masquer les en-têtes de colonnes du tableau PLC sur la feuille - + Spaltenüberschriften der SPS-Tabelle auf dem Blatt anzeigen oder ausblenden Saut %1 après: - + Sprung %1 danach: Aucun - + Keine H. ligne: - + Zeilenhöhe: mm - + mm Réf. - + Querverweis Nom personnalisé de la colonne (vide = par défaut) - + Benutzerdefinierter Spaltenname (leer = Standard) Visible - + Sichtbar Coller depuis le presse-papiers - + Aus der Zwischenablage einfügen Police des en-têtes: %1 %2pt - + Schriftgröße der Überschriften: %1 %2pt Police du texte: %1 %2pt - + Schriftgröße: %1 %2pt Police des en-têtes de colonnes - + Schriftart der Spaltenüberschriften Police du texte des cellules - + Schriftart des Zelltextes @@ -2838,7 +2838,7 @@ Der angezeigte Name des Elements lässt sich separat in den Eigenschaften des El Automates (MAE/SPS) - + Steuerungen (MAE/SPS) @@ -3351,12 +3351,12 @@ Mit dem Import dieser Datei bestätigen Sie, dass: Insérer un folio au-dessus - + Eine Seite oben einfügen Insérer un folio en dessous - + Eine Seite darunter einfügen @@ -3413,7 +3413,7 @@ Mit dem Import dieser Datei bestätigen Sie, dass: Panneau des éléments - + Elementübersicht @@ -3661,7 +3661,7 @@ Mit dem Import dieser Datei bestätigen Sie, dass: Dessiner les noms des bornes - + Die Klemmenbezeichnungen einzeichnen @@ -5018,12 +5018,12 @@ Veuillez utiliser l'éditeur avancé pour cela. Atteindre un élément window title - + Zu einem Element navigieren Nom, label ou information de l'élément… - + Name, Bezeichnung oder Informationen zum Element… @@ -5206,17 +5206,17 @@ Veuillez utiliser l'éditeur avancé pour cela. (déjà utilisé) - + (bereits verwendet) Sélectionner un IO PLC - + Ein SPS-E/A-Modul auswählen IO disponible: - + Verfügbare E/A: @@ -5385,32 +5385,32 @@ Veuillez utiliser l'éditeur avancé pour cela. Type - Typ + Typ Adresse - + Adresse Fonction - Funktion + Funktion Commentaire - Kommentar + Kommentar Réf. croisée - + Querverweis Coller depuis le presse-papiers - + Aus der Zwischenablage einfügen @@ -5654,12 +5654,12 @@ Veuillez utiliser l'éditeur avancé pour cela. Mettre à 0 pour un chiffre qui n'avance que par le report d'un chiffre cyclique suivant (ex: le "0" de "0.7") - + Auf 0 setzen, wenn es sich um eine Zahl handelt, die sich nur durch den Übertrag einer nachfolgenden zyklischen Ziffer erhöht (z. B. die „0“ in „0,7“) Valeur à laquelle ce chiffre revient à 0 en incrémentant le chiffre précédent (0 = pas de cycle) - + Wert, bei dem diese Ziffer durch Inkrementieren der vorherigen Ziffer auf 0 zurückgesetzt wird (0 = kein Zyklus) @@ -5669,12 +5669,12 @@ Veuillez utiliser l'éditeur avancé pour cela. Format d'affichage : une suite de zéros donne le nombre minimum de chiffres (00 = 07, 000 = 007). Vide = largeur naturelle du type. - + Anzeigeformat: Eine Folge von Nullen gibt die Mindestanzahl an Ziffern an (00 = 07, 000 = 007). Leer = natürliche Breite des Typs. 0 - + 0 @@ -5710,7 +5710,7 @@ Veuillez utiliser l'éditeur avancé pour cela. Cyclique (modulo) - + Zyklisch (Modul) @@ -5719,7 +5719,7 @@ Veuillez utiliser l'éditeur avancé pour cela. Alphabétique - + Alphabetisch @@ -5903,72 +5903,72 @@ Veuillez utiliser l'éditeur avancé pour cela. Cet élément est déjà lié - Das Bauteil ist bereits gebunden + Das Bauteil ist bereits gebunden Délier - Trennen + Trennen Voir cet élément - Bauteil zeigen + Bauteil zeigen Recherche - Suchen + Suchen Label - + BMK Type - Typ + Typ Adresse - + Adresse Fonction - Funktion + Funktion Commentaire - Kommentar + Kommentar Anschlüsse - + Anschlüsse Remarque : les éléments maîtres ayant atteint leur nombre maximal d'esclaves sont masqués. - Hinweis: Master-Elemente, die ihre maximale Anzahl an Slaves erreicht haben, werden ausgeblendet. + Hinweis: Master-Elemente, die ihre maximale Anzahl an Slaves erreicht haben, werden ausgeblendet. Automate (PLC) - + SPS (PLC) Lié à: %1 - + Verwandt mit: %1 Connecter - + Verbinden @@ -6266,26 +6266,26 @@ Folgende Variablen sind inkompatibel: Temps passé sur ce projet : label when configuring - + Zeitaufwand für dieses Projekt: Suivre le temps passé sur ce projet (uniquement enregistré localement dans ce fichier) checkbox label - + Die für dieses Projekt aufgewendete Zeit erfassen (wird ausschließlich lokal in dieser Datei gespeichert) Réinitialiser button label - + Zurücksetzen %1 h %2 min hours and minutes of time spent on a project - + %1 Std. %2 Min. @@ -6353,7 +6353,7 @@ Folgende Variablen sind inkompatibel: Dessiner les noms des bornes - + Die Bezeichnungen der Klemmen einzeichnen @@ -6539,7 +6539,7 @@ Voulez-vous enregistrer les modifications ? Êtes-vous sûr de vouloir supprimer ce folio du projet ? message box content - + Sind Sie sicher, dass Sie dieses Folio aus dem Projekt löschen möchten? @@ -6835,23 +6835,24 @@ Voulez-vous enregistrer les modifications ? Rapport de plantage - + Absturzbericht QElectroTech ne s'est pas fermé correctement lors de sa dernière exécution. Voici les derniers messages enregistrés avant l'arrêt -- vous pouvez les enregistrer pour les joindre à un rapport de bug. - + QElectroTech wurde bei der letzten Ausführung nicht ordnungsgemäß beendet. +Hier sind die letzten Meldungen, die vor dem Beenden aufgezeichnet wurden – Sie können sie speichern, um sie einem Fehlerbericht beizufügen. Rapport de diagnostic - + Diagnosebericht Ceci contient les derniers messages de journalisation de cette session. Vérifiez le contenu avant de le joindre à un rapport de bug public. - + Hier finden Sie die neuesten Protokolleinträge dieser Sitzung. Überprüfen Sie den Inhalt, bevor Sie ihn einem öffentlichen Fehlerbericht beifügen. @@ -7484,7 +7485,7 @@ Verfügbare Optionen: Éditeur de schémas - + Schema-Editor @@ -7501,13 +7502,13 @@ Verfügbare Optionen: Coupure automatique de conducteur(s) Tool tip of auto break conductor - + Automatische Unterbrechung der Leitung(en) Couper automatiquement les conducteurs existants lors du placement d'un élément Status tip of auto break conductor - + Vorhandene Leiter beim Platzieren eines Elements automatisch abschneiden @@ -7615,13 +7616,13 @@ Verfügbare Optionen: Atteindre un élément - + Zu einem Element navigieren Recherche et sélectionne rapidement un élément du folio status bar tip - + Ein Element im Folio schnell suchen und auswählen @@ -7698,8 +7699,8 @@ Verfügbare Optionen: %n description(s) de police écrite(s) dans un format étranger ou corrompu ont été restaurée(s). Elles seront réécrites dans un format stable au prochain enregistrement du projet. message box content - - + + %n Beschreibungen von Schriftarten, die in einem fremden oder beschädigten Format vorlagen, wurden wiederhergestellt. Sie werden beim nächsten Speichern des Projekts in ein stabiles Format umgeschrieben. @@ -7707,8 +7708,8 @@ Verfügbare Optionen: %n description(s) de police n'ont pas pu être lue(s) ; la police par défaut sera utilisée pour ces textes. message box content - - + + %n Schriftartbeschreibung(en) konnten nicht gelesen werden; für diese Texte wird die Standardschriftart verwendet. @@ -7716,7 +7717,7 @@ Verfügbare Optionen: Polices du projet message box title - + Schriftarten des Projekts @@ -7913,7 +7914,7 @@ Entfernen Sie die Überbrückung und/oder löschen Sie die Ebenen der betroffene Supprimer %1 folios - + %1 Seiten löschen @@ -7924,7 +7925,7 @@ Entfernen Sie die Überbrückung und/oder löschen Sie die Ebenen der betroffene Déplacer les folios - + Folios verschieben @@ -8023,7 +8024,7 @@ Entfernen Sie die Überbrückung und/oder löschen Sie die Ebenen der betroffene Exporter en SVG - + Als SVG exportieren @@ -8524,34 +8525,34 @@ veuillez patienter durant l'import... Éditeur d'élément - + Element-Editor X: %1 Y: %2 - + X: %1 Y: %2 Exporter en SVG dialog title - + Als SVG exportieren Image SVG (*.svg) filetypes allowed when exporting an element to SVG - + SVG-Bild (*.svg) Échec de l'export - + Export fehlgeschlagen Impossible d'écrire dans le fichier « %1 ». - + Die Datei „%1“ kann nicht beschrieben werden. @@ -8701,7 +8702,7 @@ Die erforderlichen Bedingungen wurden nicht erfüllt Général - Allgemein + Allgemein @@ -8741,13 +8742,13 @@ Die erforderlichen Bedingungen wurden nicht erfüllt Enregistrer un rapport de diagnostic... - + Diagnosebericht speichern... Génère un rapport avec les derniers messages de journalisation, pour l'inclure dans un rapport de bug status bar tip - + Erstellt einen Bericht mit den neuesten Protokollmeldungen, um ihn in einen Fehlerbericht aufzunehmen @@ -9070,7 +9071,7 @@ Was möchten Sie tun? Éditeur de cartouche - + Kartuschen-Editor @@ -9603,7 +9604,7 @@ Was möchten Sie tun? Profondeur - + Tiefe @@ -9872,7 +9873,7 @@ Was möchten Sie tun? Numéroter automatiquement un conducteur undo caption - + Eine Leitung automatisch nummerieren @@ -10214,12 +10215,12 @@ Möchten Sie sie ersetzen? Table PLC - + SPS-Tabelle Table PLC (vide) - + SPS-Tabelle (leer) @@ -10227,7 +10228,7 @@ Möchten Sie sie ersetzen? Type - Typ + Typ @@ -10235,7 +10236,7 @@ Möchten Sie sie ersetzen? Adresse - + Adresse @@ -10252,7 +10253,7 @@ Möchten Sie sie ersetzen? Réf. croisée - + Querverweis @@ -10447,27 +10448,27 @@ Möchten Sie sie ersetzen? Type PLC - + SPS-Typ Adresse PLC - + SPS-Adresse Fonction PLC - + SPS-Funktion Commentaire PLC - + SPS-Kommentar Réf. croisée PLC - + PLC-Querverweis @@ -10775,32 +10776,32 @@ Möchten Sie sie ersetzen? Entrée digitale - + Digitaler Eingang Sortie digitale - + Digitaler Ausgang Entrée analogique - + Analoger Eingang Sortie analogique - + Analoger Ausgang Entrée universelle - + Universeller Eingang Sortie universelle - + Universeller Ausgang @@ -10926,25 +10927,25 @@ Bitte laden Sie diese über den Link herunter und entpacken Sie sie in den Insta table PLC element part name - + SPS-Tabelle Ajouter un folio undo command text - Neue Folie hinzufügen + Neue Folie hinzufügen Déplacer un folio undo command text - + Ein Folio verschieben Supprimer un folio undo command text - + Ein Folio löschen @@ -12152,43 +12153,43 @@ Andere Felder werden nicht verwendet. Filtrer les raccourcis… - + Verknüpfungen filtern… Catégorie - + Kategorie Action - + Aktion Raccourci - + Abkürzung Tout réinitialiser - + Alles zurücksetzen Réinitialiser ce raccourci - + Diese Verknüpfung zurücksetzen Ce raccourci est aussi utilisé par : %1 - + Diese Verknüpfung wird auch verwendet von: %1 Raccourcis configuration page title - + Tastenkombinationen @@ -15034,17 +15035,17 @@ Andere Felder werden nicht verwendet. Alignement - Ausrichtung + Ausrichtung Point d'ancrage du texte et alignement des lignes entre elles - + Bezugspunkt des Textes und Ausrichtung der Zeilen zueinander Modifier l'alignement d'un champ texte - Ausrichtung eines Textfelds ändern + Ausrichtung eines Textfelds ändern @@ -16012,7 +16013,7 @@ Maximale Länge: %2px Automate (PLC) - + SPS (PLC) @@ -16167,7 +16168,7 @@ Maximale Länge: %2px Éditeur de texte - + Texteditor