Тема: Класи Qt та часткове зникнення їхніх методів
Створюю екземпляр класу QTextToSpeech за допомогою QPointer.
Усе працює начебто добре, жодних помилок.
Але коли намагаюся використати метод findVoices(), Qt Creator просто не бачить його.
І це не помилка написання, навіть в переліку підказок його немає, є лише findChild(), findChildren().
У мене в налаштуваннях CMakeLists задано сумісність Qt6 і Qt5,
я вирішив лишити лише Qt6 і findVoices() знову з'явився.
Але при цьому зникла підтримка qt_add_translations, метода defaultSettings з QWebEngineView
і <QActionGroup> почало вимагати окремого #include.
Що це таке? Чому Qt «обрізає» деякі методи класів у режимі сумісності різних версій? Що зробити, щоб усе працювало як слід?
Ось CMakeLists (більшість — це автоматичні налаштування створені Qt Creator):
cmake_minimum_required(VERSION 3.5)
project(Movar_cpp VERSION 0.1 LANGUAGES CXX)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR}
    REQUIRED COMPONENTS Widgets LinguistTools WebEngineWidgets TextToSpeech)
set(TS_FILES
    i18n/Movar_cpp_uk_UA.ts
    i18n/Movar_cpp_en_US.ts
    i18n/Movar_cpp_ja_JP.ts
)
set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
        ${TS_FILES}
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(Movar_cpp
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET Movar_cpp APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
    #qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
    qt_add_translations(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
else()
    if(ANDROID)
        add_library(Movar_cpp SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(Movar_cpp
            ${PROJECT_SOURCES}
            dictionarysettings.h dictionarysettings.cpp dictionarysettings.ui
            fileloader.h fileloader.cpp
            app_resources.qrc
        )
    endif()
    #qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
endif()
add_custom_target(translations DEPENDS ${QM_FILES})
add_dependencies(${CMAKE_PROJECT_NAME} translations)
target_link_libraries(Movar_cpp PRIVATE
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::WebEngineWidgets
    Qt${QT_VERSION_MAJOR}::TextToSpeech
    )
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.Movar_cpp)
endif()
set_target_properties(Movar_cpp PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)
include(GNUInstallDirs)
install(TARGETS Movar_cpp
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(Movar_cpp)
endif()