From b7730f80d8741d59bdcd55bbf80d0d9ab482d1e5 Mon Sep 17 00:00:00 2001 From: Andrii Shelestov Date: Sat, 17 Aug 2024 00:09:24 +0300 Subject: [PATCH 1/2] Qt6 compatibility fix --- .gitignore | 4 ++++ src/example/LayoutSquare.cpp | 30 ++++++++++++++++++++---------- src/example/MainWindow.h | 4 ++-- src/example1.pro | 8 +++++++- src/example2.pro | 8 +++++++- 5 files changed, 40 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 9972a37..8d2e4af 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,7 @@ target_wrapper.* # QtCreator CMake CMakeLists.txt.user* + +# Build +src/build* +build* diff --git a/src/example/LayoutSquare.cpp b/src/example/LayoutSquare.cpp index 508a702..2eba6f0 100644 --- a/src/example/LayoutSquare.cpp +++ b/src/example/LayoutSquare.cpp @@ -242,18 +242,28 @@ QPoint LayoutSquare::calculateCenterPnt( QSize fromSize, QSize itemSize ) const QSize LayoutSquare::calculateProperSize( QSize fromSize ) const { QSize resultSize; - - if ( fromSize.height() < fromSize.width() ) - { - resultSize.setHeight ( fromSize.height() - margin() ); - resultSize.setWidth ( fromSize.height() - margin() ); + +#if QT_VERSION_MAJOR >= 6 + QMargins margins = contentsMargins(); + if (fromSize.height() < fromSize.width()) { + // TODO Consider using all margins + resultSize.setHeight(fromSize.height() - margins.top()); + resultSize.setWidth(fromSize.height() - margins.right()); + } else { + // TODO Consider using all margins + resultSize.setHeight(fromSize.width() - margins.top()); + resultSize.setWidth(fromSize.width() - margins.right()); } - else - { - resultSize.setHeight ( fromSize.width() - margin() ); - resultSize.setWidth ( fromSize.width() - margin() ); +#else + if (fromSize.height() < fromSize.width()) { + resultSize.setHeight(fromSize.height() - margin()); + resultSize.setWidth(fromSize.height() - margin()); + } else { + resultSize.setHeight(fromSize.width() - margin()); + resultSize.setWidth(fromSize.width() - margin()); } - +#endif + return resultSize; } diff --git a/src/example/MainWindow.h b/src/example/MainWindow.h index 58f921a..3221d2d 100644 --- a/src/example/MainWindow.h +++ b/src/example/MainWindow.h @@ -24,8 +24,8 @@ //////////////////////////////////////////////////////////////////////////////// +#include #include -#include //////////////////////////////////////////////////////////////////////////////// @@ -69,7 +69,7 @@ class MainWindow : public QMainWindow double _realTime; ///< [s] real time double _playTime; ///< [s] time for automatic parameters updating - QTime _time; ///< time + QElapsedTimer _time; ///< time }; //////////////////////////////////////////////////////////////////////////////// diff --git a/src/example1.pro b/src/example1.pro index cfedbde..cf73443 100644 --- a/src/example1.pro +++ b/src/example1.pro @@ -1,7 +1,13 @@ -QT += core gui svg +QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets +greaterThan(QT_MAJOR_VERSION, 5) { + QT += svgwidgets +} else { + QT += svg +} + TEMPLATE = app ################################################################################ diff --git a/src/example2.pro b/src/example2.pro index e2cf65c..c7e1976 100644 --- a/src/example2.pro +++ b/src/example2.pro @@ -1,7 +1,13 @@ -QT += core gui svg +QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets +greaterThan(QT_MAJOR_VERSION, 5) { + QT += svgwidgets +} else { + QT += svg +} + TEMPLATE = app ################################################################################ From afae6e0e7e38dfc7526460f8edfdea753b07f577 Mon Sep 17 00:00:00 2001 From: Andrii Shelestov Date: Fri, 6 Sep 2024 20:59:00 +0300 Subject: [PATCH 2/2] CMake WIP --- CMakeLists.txt | 11 ++++ src/example/CMakeLists.txt | 106 +++++++++++++++++++++++++++++++++++++ src/qfi/CMakeLists.txt | 74 ++++++++++++++++++++++++++ 3 files changed, 191 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 src/example/CMakeLists.txt create mode 100644 src/qfi/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..3835418 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.16) + +project(QFlightInstruments) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +add_subdirectory( + src/qfi + src/example +) diff --git a/src/example/CMakeLists.txt b/src/example/CMakeLists.txt new file mode 100644 index 0000000..fd256a3 --- /dev/null +++ b/src/example/CMakeLists.txt @@ -0,0 +1,106 @@ +cmake_minimum_required(VERSION 3.14) + +# Define the project name and version +project(qfi_example2 VERSION 1.0 LANGUAGES CXX) + +# Find required packages (Qt5 or Qt6 based on the environment) +find_package(Qt5 COMPONENTS Core Gui Widgets Svg REQUIRED) + +# If Qt5.6 or higher, also include svgwidgets +if(Qt5_VERSION VERSION_GREATER_EQUAL 5.6) + find_package(Qt5 COMPONENTS SvgWidgets REQUIRED) +endif() + +# Set the C++ standard +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Create an executable target +add_executable(qfi_example2) + +# Set the include directories +target_include_directories(qfi_example2 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + +# Add source files +set(SOURCES + LayoutSquare.cpp # example/LayoutSquare.cpp + MainWindow.cpp # example/MainWindow.cpp + WidgetAI.cpp # example/WidgetAI.cpp + WidgetALT.cpp # example/WidgetALT.cpp + WidgetASI.cpp # example/WidgetASI.cpp + WidgetEADI.cpp # example/WidgetEADI.cpp + WidgetEHSI.cpp # example/WidgetEHSI.cpp + WidgetHI.cpp # example/WidgetHI.cpp + WidgetTC.cpp # example/WidgetTC.cpp + WidgetVSI.cpp # example/WidgetVSI.cpp + WidgetSix.cpp # example/WidgetSix.cpp + main.cpp # example/main.cpp +) + +# Add header files +set(HEADERS + LayoutSquare.h # example/LayoutSquare.h + MainWindow.h # example/MainWindow.h + WidgetAI.h # example/WidgetAI.h + WidgetALT.h # example/WidgetALT.h + WidgetASI.h # example/WidgetASI.h + WidgetEADI.h # example/WidgetEADI.h + WidgetEHSI.h # example/WidgetEHSI.h + WidgetHI.h # example/WidgetHI.h + WidgetTC.h # example/WidgetTC.h + WidgetVSI.h # example/WidgetVSI.h + WidgetSix.h # example/WidgetSix.h +) + +# Add UI forms +set(FORMS + MainWindow.ui #example/MainWindow.ui + WidgetAI.ui #example/WidgetAI.ui + WidgetALT.ui #example/WidgetALT.ui + WidgetASI.ui #example/WidgetASI.ui + WidgetEADI.ui #example/WidgetEADI.ui + WidgetEHSI.ui #example/WidgetEHSI.ui + WidgetHI.ui #example/WidgetHI.ui + WidgetTC.ui #example/WidgetTC.ui + WidgetVSI.ui #example/WidgetVSI.ui + WidgetSix.ui #example/WidgetSix.ui +) + +# Add the source, headers, and UI files to the executable +target_sources(qfi_example2 PRIVATE ${SOURCES} ${HEADERS}) + +# Add the UI forms to the project +qt5_wrap_ui(UI_HEADERS ${FORMS}) + +# Link the UI headers with the project +target_sources(qfi_example2 PRIVATE ${UI_HEADERS}) + +# Link against the necessary Qt libraries +target_link_libraries(qfi_example2 PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Svg) +if (Qt5_VERSION VERSION_GREATER_EQUAL 5.6) + target_link_libraries(qfi_example2 PRIVATE Qt5::SvgWidgets) +endif() + +# Link against the qfi library +target_link_libraries(qfi_example2 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../lib/libqfi.so) + +# Define preprocessor definitions +target_compile_definitions(qfi_example2 PRIVATE QFI_DLL_IMPORTS QT_DEPRECATED_WARNINGS) + +# Conditional compilation for Windows +if(WIN32) + target_compile_definitions(qfi_example2 PRIVATE NOMINMAX WIN32 _WINDOWS _CRT_SECURE_NO_DEPRECATE _SCL_SECURE_NO_WARNINGS _USE_MATH_DEFINES) + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:NO") +endif() + +# Conditional compilation for Linux +if(UNIX) + target_compile_definitions(qfi_example2 PRIVATE _LINUX_) + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") +endif() + +# Set output directory for the executable +set_target_properties(qfi_example2 PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../bin +) diff --git a/src/qfi/CMakeLists.txt b/src/qfi/CMakeLists.txt new file mode 100644 index 0000000..967a567 --- /dev/null +++ b/src/qfi/CMakeLists.txt @@ -0,0 +1,74 @@ +cmake_minimum_required(VERSION 3.14) + +# Define the project name and version +project(qfi VERSION 1.0 LANGUAGES CXX) + +# Find required packages (Qt5 or Qt6 based on the environment) +find_package(Qt5 COMPONENTS Widgets Svg REQUIRED) + +# Create a library target +add_library(qfi SHARED) + +# Set the include directories +target_include_directories(qfi PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + +# Add source files +set(SOURCES + qfi_Colors.cpp # qfi/qfi_Colors.cpp + qfi_Fonts.cpp # qfi/qfi_Fonts.cpp + qfi_EADI.cpp # qfi/qfi_EADI.cpp + qfi_EHSI.cpp # qfi/qfi_EHSI.cpp + qfi_AI.cpp # qfi/qfi_AI.cpp + qfi_HI.cpp # qfi/qfi_HI.cpp + qfi_VSI.cpp # qfi/qfi_VSI.cpp + qfi_ASI.cpp # qfi/qfi_ASI.cpp + qfi_ALT.cpp # qfi/qfi_ALT.cpp + qfi_TC.cpp # qfi/qfi_TC.cpp +) + +# Add header files +set(HEADERS + qfi_defs.h # qfi/qfi_defs.h + qfi_doxygen.h # qfi/qfi_doxygen.h + qfi_Colors.h # qfi/qfi_Colors.h + qfi_Fonts.h # qfi/qfi_Fonts.h + qfi_EADI.h # qfi/qfi_EADI.h + qfi_EHSI.h # qfi/qfi_EHSI.h + qfi_AI.h # qfi/qfi_AI.h + qfi_HI.h # qfi/qfi_HI.h + qfi_VSI.h # qfi/qfi_VSI.h + qfi_ASI.h # qfi/qfi_ASI.h + qfi_ALT.h # qfi/qfi_ALT.h + qfi_TC.h # qfi/qfi_TC.h +) + +# Add the resource file +qt5_add_resources(RESOURCES qfi.qrc) # qfi/qfi.qrc + +# Add sources, headers, and resources to the library +target_sources(qfi PRIVATE ${SOURCES} ${HEADERS} ${RESOURCES}) + +# Link against the necessary Qt libraries +target_link_libraries(qfi PRIVATE Qt5::Widgets Qt5::Svg) + +# Define preprocessor definitions +target_compile_definitions(qfi PRIVATE QFI_DLL_EXPORTS QT_DEPRECATED_WARNINGS) + +# Conditional compilation for Windows +if(WIN32) + target_compile_definitions(qfi PRIVATE NOMINMAX WIN32 _WINDOWS _CRT_SECURE_NO_DEPRECATE _SCL_SECURE_NO_WARNINGS _USE_MATH_DEFINES) + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:NO") +endif() + +# Conditional compilation for Linux +if(UNIX) + target_compile_definitions(qfi PRIVATE _LINUX_) + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") +endif() + +# Set output directory for the shared library +set_target_properties(qfi PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../lib + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../lib +)