From 9ec02bc0887b48307ceb5ccac13490bd940c65e3 Mon Sep 17 00:00:00 2001 From: joshua Date: Tue, 27 Jan 2026 23:31:34 +0100 Subject: [PATCH] Build with qt6 and cmake First build with qt6 and cmake. QET compil, but a lot of things don't work. Build tested on debian sid and ubuntu 25.04. Dependency needed under debian and ubuntu : qtcreator cmake qt6-tools-dev qt6-svg-dev libsqlite3-dev libkf6coreaddons-dev extra-cmake-modules libkf6widgetsaddons-dev --- CMakeLists.txt | 61 +++++++++-------- cmake/define_definitions.cmake | 15 +++-- cmake/developer_options.cmake | 7 +- cmake/fetch_kdeaddons.cmake | 65 +++++++++---------- cmake/qet_compilation_vars.cmake | 12 +++- .../ElementsCollection/elementslocation.cpp | 6 +- .../GraphicsItem/terminalstripdrawer.cpp | 1 + sources/TerminalStrip/physicalterminal.cpp | 2 +- sources/machine_info.cpp | 12 +--- sources/qetxml.h | 1 + sources/qgimanager.cpp | 19 ------ sources/qgimanager.h | 4 -- sources/titleblock/templatescollection.cpp | 2 +- sources/titleblock/templateview.h | 2 + sources/titleblocktemplate.cpp | 2 +- 15 files changed, 95 insertions(+), 116 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 794ac6eb5..4b79a7d37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,10 +16,10 @@ include(cmake/hoto_update_cmake_message.cmake) -cmake_minimum_required(VERSION 3.14...3.19 FATAL_ERROR) +cmake_minimum_required(VERSION 3.21.1 FATAL_ERROR) project(qelectrotech - VERSION 0.9.0 + VERSION 0.100.0 DESCRIPTION "QET is a CAD/CAE editor focusing on schematics drawing features." HOMEPAGE_URL "https://qelectrotech.org/" LANGUAGES CXX) @@ -27,9 +27,16 @@ project(qelectrotech include(cmake/copyright_message.cmake) set(QET_DIR ${PROJECT_SOURCE_DIR}) +include(cmake/qet_compilation_vars.cmake) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(Qt6 REQUIRED COMPONENTS ${QET_COMPONENTS}) +qt_standard_project_setup() # Add sub directories -option(PACKAGE_TESTS "Build the tests" ON) +option(PACKAGE_TESTS "Build the tests" NO) if(PACKAGE_TESTS) message("Add sub directory tests") add_subdirectory(tests) @@ -43,42 +50,19 @@ include(cmake/git_last_commit_sha.cmake) include(cmake/fetch_kdeaddons.cmake) include(cmake/fetch_singleapplication.cmake) include(cmake/fetch_pugixml.cmake) -include(cmake/qet_compilation_vars.cmake) set(CMAKE_INCLUDE_CURRENT_DIR ON) -set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) - -SET(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -find_package( - QT - NAMES - Qt6 - Qt5 - COMPONENTS - ${QET_COMPONENTS} - REQUIRED - ) - -find_package( - Qt${QT_VERSION_MAJOR} - COMPONENTS - ${QET_COMPONENTS} - REQUIRED) set(CMAKE_AUTOUIC_SEARCH_PATHS ${QET_DIR}/sources/ui) -qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES}) -set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION "${QET_DIR}/lang") -qt5_add_translation(QM_FILES ${TS_FILES}) # als laatse include(cmake/define_definitions.cmake) -add_executable( +find_package(KF6WidgetsAddons REQUIRED) + +qt_add_executable( ${PROJECT_NAME} ${QET_RES_FILES} ${QET_SRC_FILES} @@ -86,14 +70,26 @@ add_executable( ${QET_DIR}/qelectrotech.qrc ) +if(QMFILES_AS_RESOURCE) + qt_add_translations(${PROJECT_NAME} TS_FILES ${TS_FILES} RESOURCE_PREFIX "/lang") +else() + qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES}) + set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION "${QET_DIR}/lang") + qt_add_translation(QM_FILES ${TS_FILES}) +endif() + +find_package(SQLite3 REQUIRED) + target_link_libraries( ${PROJECT_NAME} PUBLIC PRIVATE pugixml::pugixml SingleApplication::SingleApplication - ${KF5_PRIVATE_LIBRARIES} + SQLite::SQLite3 + ${KF6_PRIVATE_LIBRARIES} ${QET_PRIVATE_LIBRARIES} + KF6::WidgetsAddons ) target_include_directories( @@ -149,6 +145,7 @@ install(FILES LICENSE ELEMENTS.LICENSE CREDIT README ChangeLog DESTINATION share install(FILES misc/org.qelectrotech.qelectrotech.desktop DESTINATION share/applications) install(FILES misc/qelectrotech.xml DESTINATION share/mime/packages) install(FILES misc/qelectrotech.appdata.xml DESTINATION ${QET_APPDATA_PATH}) -install(FILES ${QM_FILES} DESTINATION ${QET_LANG_PATH}) - +if(NOT QMFILES_AS_RESOURCE) + install(FILES ${QM_FILES} DESTINATION ${QET_LANG_PATH}) +endif() endif() diff --git a/cmake/define_definitions.cmake b/cmake/define_definitions.cmake index 7f9cb6ae0..928af15bd 100644 --- a/cmake/define_definitions.cmake +++ b/cmake/define_definitions.cmake @@ -62,10 +62,15 @@ message("PROJECT_SOURCE_DIR :" ${PROJECT_SOURCE_DIR}) message("QET_DIR :" ${QET_DIR}) message("GIT_COMMIT_SHA :" ${GIT_COMMIT_SHA}) -if(BUILD_WITH_KF5) - message("KF5_GIT_TAG :" ${KF5_GIT_TAG}) -else() - add_definitions(-DBUILD_WITHOUT_KF5) +if(BUILD_WITH_KF6 AND BUILD_KF6) + message("KF6_GIT_TAG :" ${KF6_GIT_TAG}) +endif() +if(NOT BUILD_WITH_KF6) + add_definitions(-DBUILD_WITHOUT_KF6) endif() message("QET_COMPONENTS :" ${QET_COMPONENTS}) -message("QT_VERSION_MAJOR :" ${QT_VERSION_MAJOR}) +message("Qt version :" ${Qt6_VERSION}) + +if(QMFILES_AS_RESOURCE) + add_definitions(-DQMFILES_AS_RESOURCE) +endif() diff --git a/cmake/developer_options.cmake b/cmake/developer_options.cmake index 04f002da4..0431afd84 100644 --- a/cmake/developer_options.cmake +++ b/cmake/developer_options.cmake @@ -31,5 +31,8 @@ add_definitions(-DQT_MESSAGELOGCONTEXT) # In order to do so, uncomment the following line. #add_definitions(-DTODO_LIST) -# Build with KF5 -option(BUILD_WITH_KF5 "Build with KF5" ON) +# Build with KF6 +option(BUILD_WITH_KF6 "Build with KF6" ON) + +# Use translations as a Qt resource +option(QMFILES_AS_RESOURCE "Use .qm files as Qt resource" ON) diff --git a/cmake/fetch_kdeaddons.cmake b/cmake/fetch_kdeaddons.cmake index ac5a340f9..fc8bd76e4 100644 --- a/cmake/fetch_kdeaddons.cmake +++ b/cmake/fetch_kdeaddons.cmake @@ -14,54 +14,47 @@ # You should have received a copy of the GNU General Public License # along with QElectroTech. If not, see . -message(" - fetch_kdeaddons") +message(STATUS "fetch_kdeaddons") -if(DEFINED BUILD_WITH_KF5) - Include(FetchContent) +if(BUILD_WITH_KF6) + option(BUILD_KF6 "Build KF6 libraries, use system ones otherwise" OFF) + block(PROPAGATE KF6_GIT_TAG) + set(BUILD_TESTING OFF) + set(KDE_SKIP_TEST_SETTINGS ON) + set(BUILD_DESIGNERPLUGIN OFF) + set(KCOREADDONS_USE_QML OFF) + set(BUILD_QCH OFF) + set(BUILD_SHARED_LIBS OFF) + find_package(ECM 6.8.0 REQUIRED NO_MODULE) + list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) - option(BUILD_KF5 "Build KF5 libraries, use system ones otherwise" YES) + if(BUILD_KF6) + Include(FetchContent) - if(BUILD_KF5) - - if(NOT DEFINED KF5_GIT_TAG) - #https://qelectrotech.org/forum/viewtopic.php?pid=13924#p13924 - set(KF5_GIT_TAG v5.77.0) + if(NOT DEFINED KF6_GIT_TAG) + set(KF6_GIT_TAG v6.8.0) endif() - # Fix stop the run autotests of kcoreaddons - # see - # https://invent.kde.org/frameworks/kcoreaddons/-/blob/master/CMakeLists.txt#L98 - # issue: - # CMake Error at /usr/share/ECM/modules/ECMAddTests.cmake:89 (add_executable): - # Cannot find source file: - # see - # https://qelectrotech.org/forum/viewtopic.php?pid=13929#p13929 - set(KDE_SKIP_TEST_SETTINGS "TRUE") - set(BUILD_TESTING "0") - FetchContent_Declare( - ecm - GIT_REPOSITORY https://invent.kde.org/frameworks/extra-cmake-modules.git - GIT_TAG ${KF5_GIT_TAG}) - FetchContent_MakeAvailable(ecm) - FetchContent_Declare( kcoreaddons GIT_REPOSITORY https://invent.kde.org/frameworks/kcoreaddons.git - GIT_TAG ${KF5_GIT_TAG}) + GIT_TAG ${KF6_GIT_TAG}) FetchContent_MakeAvailable(kcoreaddons) + get_target_property(kca_version KF6::CoreAddons VERSION) - FetchContent_Declare( - kwidgetsaddons - GIT_REPOSITORY https://invent.kde.org/frameworks/kwidgetsaddons.git - GIT_TAG ${KF5_GIT_TAG}) - FetchContent_MakeAvailable(kwidgetsaddons) else() - find_package(KF5CoreAddons REQUIRED) - find_package(KF5WidgetsAddons REQUIRED) + find_package(KF6CoreAddons REQUIRED) + set(kca_version ${KF6CoreAddons_VERSION}) endif() - set(KF5_PRIVATE_LIBRARIES - KF5::WidgetsAddons - KF5::CoreAddons + get_target_property(kwa_type KF6::CoreAddons TYPE) + + message(NOTICE "ecm version : " ${ECM_VERSION}) + message(NOTICE "kcoreaddons library : " ${kca_type}) + message(NOTICE "kcoreaddons version : " ${kca_version}) + endblock() + + set(KF6_PRIVATE_LIBRARIES + KF6::CoreAddons ) endif() diff --git a/cmake/qet_compilation_vars.cmake b/cmake/qet_compilation_vars.cmake index d0d33af19..389ec0bc3 100644 --- a/cmake/qet_compilation_vars.cmake +++ b/cmake/qet_compilation_vars.cmake @@ -17,6 +17,8 @@ message(" - qet_compilation_vars") set(QET_COMPONENTS + Core + Gui LinguistTools PrintSupport Xml @@ -109,6 +111,12 @@ set(QET_SRC_FILES ${QET_DIR}/sources/borderproperties.h ${QET_DIR}/sources/bordertitleblock.cpp ${QET_DIR}/sources/bordertitleblock.h + # ${QET_DIR}/sources/colorbutton.cpp + # ${QET_DIR}/sources/colorbutton.h + # ${QET_DIR}/sources/colorcombobox.cpp + # ${QET_DIR}/sources/colorcombobox.h + # ${QET_DIR}/sources/colorcomboboxdelegate.cpp + # ${QET_DIR}/sources/colorcomboboxdelegate.h ${QET_DIR}/sources/conductorautonumerotation.cpp ${QET_DIR}/sources/conductorautonumerotation.h ${QET_DIR}/sources/conductornumexport.cpp @@ -726,19 +734,17 @@ set(TS_FILES ${QET_DIR}/lang/qet_mn.ts ${QET_DIR}/lang/qet_nb.ts ${QET_DIR}/lang/qet_nl.ts - ${QET_DIR}/lang/qet_nl_BE.ts + ${QET_DIR}/lang/qet_nl_BE.ts ${QET_DIR}/lang/qet_no.ts ${QET_DIR}/lang/qet_pl.ts ${QET_DIR}/lang/qet_pt.ts ${QET_DIR}/lang/qet_pt_BR.ts ${QET_DIR}/lang/qet_ro.ts - ${QET_DIR}/lang/qet_rs.ts ${QET_DIR}/lang/qet_ru.ts ${QET_DIR}/lang/qet_sk.ts ${QET_DIR}/lang/qet_sl.ts ${QET_DIR}/lang/qet_sr.ts ${QET_DIR}/lang/qet_sv.ts ${QET_DIR}/lang/qet_tr.ts - ${QET_DIR}/lang/qet_uk.ts ${QET_DIR}/lang/qet_zh.ts ) diff --git a/sources/ElementsCollection/elementslocation.cpp b/sources/ElementsCollection/elementslocation.cpp index f236d9edb..d035d1ed4 100644 --- a/sources/ElementsCollection/elementslocation.cpp +++ b/sources/ElementsCollection/elementslocation.cpp @@ -807,13 +807,13 @@ bool ElementsLocation::setXml(const QDomDocument &xml_document) const QString path_ = collectionPath(false); QRegularExpression rx("^(.*)/(.*\\.elmt)$"); - if (rx.exactMatch(path_)) + if (auto regex_match = rx.match(path_); regex_match.hasMatch()) { return project() ->embeddedElementCollection() ->addElementDefinition( - rx.cap(1), - rx.cap(2), + regex_match.captured(1), + regex_match.captured(2), xml_document.documentElement()); } else diff --git a/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp b/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp index fec36bccd..0e84cd116 100644 --- a/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp +++ b/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp @@ -18,6 +18,7 @@ #include "terminalstripdrawer.h" #include +#include namespace TerminalStripDrawer { diff --git a/sources/TerminalStrip/physicalterminal.cpp b/sources/TerminalStrip/physicalterminal.cpp index b5d49acda..c2db79c2f 100644 --- a/sources/TerminalStrip/physicalterminal.cpp +++ b/sources/TerminalStrip/physicalterminal.cpp @@ -131,7 +131,7 @@ bool PhysicalTerminal::setLevelOf(const QSharedPointer &terminal, if (i >= 0) { #if QT_VERSION >= QT_VERSION_CHECK(5,14,0) - m_real_terminal.swapItemsAt(i, std::min(level, m_real_terminal.size()-1)); + m_real_terminal.swapItemsAt(i, std::min(static_cast(level), m_real_terminal.size()-1)); #else auto j = std::min(level, m_real_terminal.size()-1); std::swap(m_real_terminal.begin()[i], m_real_terminal.begin()[j]); diff --git a/sources/machine_info.cpp b/sources/machine_info.cpp index 58283d53a..6e8eeeca5 100644 --- a/sources/machine_info.cpp +++ b/sources/machine_info.cpp @@ -188,10 +188,8 @@ void MachineInfo::send_info_to_debug() QDirIterator it1(QETApp::commonElementsDir().toLatin1(),nameFilters, QDir::Files, QDirIterator::Subdirectories); while (it1.hasNext()) { - if(it1.next() > 0 ) - { + it1.next(); commomElementsDir ++; - } } qInfo()<< " Common Elements count:"<< commomElementsDir << "Elements"; @@ -200,10 +198,8 @@ void MachineInfo::send_info_to_debug() QDirIterator it2(QETApp::customElementsDir().toLatin1(), nameFilters, QDir::Files, QDirIterator::Subdirectories); while (it2.hasNext()) { - if(it2.next() > 0 ) - { + it2.next(); customElementsDir ++; - } } qInfo()<< " Custom Elements count:"<< customElementsDir << "Elements"; @@ -211,10 +207,8 @@ void MachineInfo::send_info_to_debug() QDirIterator it3(QETApp::companyElementsDir().toLatin1(), nameFilters, QDir::Files, QDirIterator::Subdirectories); while (it3.hasNext()) { - if(it3.next() > 0 ) - { + it3.next(); companyElementsDir ++; - } } qInfo()<< " Company Elements count:"<< companyElementsDir << "Elements"; diff --git a/sources/qetxml.h b/sources/qetxml.h index f119fa3a4..cdc5ae394 100644 --- a/sources/qetxml.h +++ b/sources/qetxml.h @@ -20,6 +20,7 @@ #include #include +#include class QDomDocument; class QDir; diff --git a/sources/qgimanager.cpp b/sources/qgimanager.cpp index 5f92596d2..f6eedefb6 100644 --- a/sources/qgimanager.cpp +++ b/sources/qgimanager.cpp @@ -70,25 +70,6 @@ void QGIManager::release(QGraphicsItem *qgi) { } } -/** - Demande au QGIManager de gerer plusieurs QGI - @param qgis QGraphicsItems a gerer -*/ -void QGIManager::manage(const QList &qgis) { - foreach(QGraphicsItem *qgi, qgis) manage(qgi); -} - -/** - Indique au QGIManager que pour chaque QGI fourni, une reference vers celui-ci - a ete detruite. - S'il n'y a plus de references vers un QGI et que celui-ci n'est pas present - sur la scene de ce QGIManager, alors il sera detruit. - @param qgis QGraphicsItems a ne plus gerer -*/ -void QGIManager::release(const QList &qgis) { - foreach(QGraphicsItem *qgi, qgis) release(qgi); -} - void QGIManager::manage(const QVector &items) { for (const auto &qgi : items) { manage(qgi); diff --git a/sources/qgimanager.h b/sources/qgimanager.h index d8605a225..f6af9c480 100644 --- a/sources/qgimanager.h +++ b/sources/qgimanager.h @@ -45,10 +45,6 @@ class QGIManager { public: void manage(QGraphicsItem *); void release(QGraphicsItem *); - QT_DEPRECATED_X("Use QGIManager::manage(const QVector &) instead") - void manage(const QList &); - QT_DEPRECATED_X("Use QGIManager::release(const QVector &) instead") - void release(const QList &); void manage(const QVector &items); void release(const QVector &items); void setDestroyQGIOnDelete(bool); diff --git a/sources/titleblock/templatescollection.cpp b/sources/titleblock/templatescollection.cpp index 216ef8db7..dc8814a4f 100644 --- a/sources/titleblock/templatescollection.cpp +++ b/sources/titleblock/templatescollection.cpp @@ -454,7 +454,7 @@ QDomElement TitleBlockTemplatesFilesCollection::getTemplateXmlDescription(const } QDomDocument *xml_document = new QDomDocument(); - bool xml_parsing = xml_document -> setContent(&xml_file); + const auto xml_parsing = xml_document -> setContent(&xml_file); if (!xml_parsing) { delete xml_document; return(QDomElement()); diff --git a/sources/titleblock/templateview.h b/sources/titleblock/templateview.h index 417b8e8d5..97c82eae9 100644 --- a/sources/titleblock/templateview.h +++ b/sources/titleblock/templateview.h @@ -24,6 +24,8 @@ class HelperCell; class SplittedHelperCell; class TitleBlockTemplateCommand; class TitleBlockTemplateCellsSet; +class QGraphicsLayoutItem; +class QGraphicsGridLayout; /** This QGraphicsView subclass is used in the title block template editor to diff --git a/sources/titleblocktemplate.cpp b/sources/titleblocktemplate.cpp index 351a34469..122705d3f 100644 --- a/sources/titleblocktemplate.cpp +++ b/sources/titleblocktemplate.cpp @@ -103,7 +103,7 @@ bool TitleBlockTemplate::loadFromXmlFile(const QString &filepath) { // parse its content as XML QDomDocument xml_doc; - bool xml_parsing = xml_doc.setContent(&template_file); + const auto xml_parsing = xml_doc.setContent(&template_file); if (!xml_parsing) { return(false); }