Тема: Класи 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()