Daqster

QtRest Qt6 Porting Guide

Родител: Porting Topics Documentation Index

Този документ описва процеса на портиране на QtRest библиотеката за Qt6 support в Daqster проекта.

Актуален статус (май 2026)

Fork бележки (спрямо оригиналните репозитории)

Анализ на QtRest за Qt6

Използвани Qt модули:

Qt модули НЕ използвани:

Заключение:

QtRest е напълно съвместим с Qt6! Всички използвани Qt модули са налични и стабилни в Qt6.

Направени промени

1. QtRest CMakeLists.txt обновяване:

## Find Qt libraries - support both Qt5 and Qt6
if(QT_VERSION_MAJOR EQUAL 6)
    find_package(Qt6 REQUIRED COMPONENTS
                 Network
                 Core
                 Qml
    )
    set(QT_PREFIX Qt6)
else()
    find_package(Qt5 5.3 COMPONENTS
                 Network
                 Core
                 Widgets
                 Gui
                 Qml
    )
    set(QT_PREFIX Qt5)
endif()

target_link_libraries(qtrest_lib
  PUBLIC
    ${QT_PREFIX}::Core
    ${QT_PREFIX}::Network
    ${QT_PREFIX}::Qml
)

2. Главен CMakeLists.txt обновяване:

if(QT_VERSION_MAJOR EQUAL 5)
    # Qt5 - изисква QuickControls2 за QtRest
    if(QT_QUICKCONTROLS2_LIB AND NOT "${QT_QUICKCONTROLS2_LIB}" STREQUAL "")
        add_subdirectory(src/external_libs/qtrest_lib)
        message(STATUS "QtRest library enabled for Qt5 (QuickControls2 available)")
    else()
        message(STATUS "QtRest library disabled for Qt5 (QuickControls2 not available)")
    endif()
else()
    # Qt6 - изисква само QML за QtRest
    if(QT_QML_LIB AND NOT "${QT_QML_LIB}" STREQUAL "")
        add_subdirectory(src/external_libs/qtrest_lib)
        message(STATUS "QtRest library enabled for Qt6 (QML available)")
    else()
        message(STATUS "QtRest library disabled for Qt6 (QML not available)")
    endif()
endif()

3. Plugins CMakeLists.txt обновяване:

if(QT_VERSION_MAJOR EQUAL 5)
    # Qt5 - изисква QuickControls2 + QtRest library
    if(QT_QUICKCONTROLS2_LIB AND NOT "${QT_QUICKCONTROLS2_LIB}" STREQUAL "" AND TARGET qtrest_lib)
        add_subdirectory(QtCoinTrader)
        message(STATUS "QtCoinTrader plugin enabled for Qt5 (QuickControls2 + QtRest library available)")
    endif()
else()
    # Qt6 - изисква само QML + QtRest library
    if(QT_QML_LIB AND NOT "${QT_QML_LIB}" STREQUAL "" AND TARGET qtrest_lib)
        add_subdirectory(QtCoinTrader)
        message(STATUS "QtCoinTrader plugin enabled for Qt6 (QML + QtRest library available)")
    endif()
endif()

Резултати

Qt5 Support:

Qt6 Support:

NodeEditor:

Тестване

Тестов скрипт:

./test_qt6_qtrest.sh

Ръчно тестване:

# Qt6 build
cmake -S . -B build_qt6 -DUSE_QT6=ON
cmake --build build_qt6 -j

# Проверка на резултатите
ls -la build_qt6/lib/libqtrest_lib.so
ls -la build_qt6/bin/plugins/libQtCoinTraderPlugin.so

Сравнение Qt5 vs Qt6

Компонент Qt5 Qt6 Забележка
QtRest Library QuickControls2 required QML required Qt6 е по-лесен
QtCoinTrader Plugin QuickControls2 + QtRest QML + QtRest Qt6 е по-лесен
NodeEditor Plugin Пълна поддръжка Пълна поддръжка QtCharts/QtMultimedia compatibility слой
Test Plugins Всички Всички Без промени

Upstream Updates

Текущо състояние:

Препоръка:

# Merge upstream changes
./tools/build_helpers/manage_upstream.sh merge qtrest

# Или cherry-pick specific commits
./tools/build_helpers/manage_upstream.sh cherry-pick <commit-hash>

Следващи стъпки

  1. CI integration - добавете редовен Qt5/Qt6 matrix build.
  2. Runtime hygiene - пазете отделни plugin директории за Qt5 и Qt6 build-ове.
  3. Regression tests - добавете smoke test за зареждане на всички плъгини.

Предимства на Qt6 портирането

  1. По-лесни dependencies - само QML вместо QuickControls2
  2. По-добра производителност - Qt6 оптимизации
  3. Модерен код - най-нови Qt features
  4. Дългосрочна поддръжка - Qt6 е current LTS

Важни забележки

  1. NodeEditor вече е активен и за Qt6.
  2. QtRest работи отлично с Qt6.
  3. QtCoinTrader работи с Qt6 при наличен QtRest.
  4. Test plugins работят с двете версии.

Полезни линкове