1

Тема: Qt6 CMake qt_add_translations

Намагаюся заповнити ts файл відповідними словами для перекладу.
Для цього згідно документації додаю qt_add_translations.

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools WebEngineWidgets)

qt_add_translations(Movar_cpp TS_FILES Movar_cpp_uk_UA.ts)

Але Qt Creator видає помилку Unknown CMake command "qt_add_translations".
Чому?

2

Re: Qt6 CMake qt_add_translations

qt_add_translations

doc.qt.io/Qt-6 написав:

Команда визначена в компоненті LinguistTools з пакета Qt6. Завантаж компонент з:

find_package(Qt6 REQUIRED COMPONENTS LinguistTools)

Ця команда була внесена в Qt 6.2.

І зверни увагу на Note і Warning.

Vitaliy_Danmer написав:
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools)

Qt6/Example-Guideline

wiki.qt.io/Qt6 написав:

Build System

  • CMake

    • Не користуй шаблон find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core), який є для екземплярів в файлах CMakeLists.txt створених Qt Creator wizards.

Подякували: Teg Miles1

3

Re: Qt6 CMake qt_add_translations

leofun01 написав:

qt_add_translations

doc.qt.io/Qt-6 написав:

Команда визначена в компоненті LinguistTools з пакета Qt6. Завантаж компонент з:

find_package(Qt6 REQUIRED COMPONENTS LinguistTools)

Ця команда була внесена в Qt 6.2.

І зверни увагу на Note і Warning.

Vitaliy_Danmer написав:
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools)

Qt6/Example-Guideline

wiki.qt.io/Qt6 написав:

Build System

  • CMake

    • Не користуй шаблон find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core), який є для екземплярів в файлах CMakeLists.txt створених Qt Creator wizards.

Переписав CMakeLists повністю, ось так:

cmake_minimum_required(VERSION 3.5)

project(Movar_cpp VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 REQUIRED COMPONENTS Widgets LinguistTools WebEngineWidgets)
qt_standard_project_setup()

qt_add_executable(Movar_cpp
    ${PROJECT_SOURCES}
)
qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
qt_add_translations(Movar_cpp TS_FILES Movar_cpp_uk_UA.ts)

target_link_libraries(Movar_cpp PRIVATE Qt6::Widgets)
target_link_libraries(Movar_cpp PRIVATE Qt6::WebEngineWidgets)

set_target_properties(Movar_cpp PROPERTIES
    WIN32_EXECUTABLE ON
)

Компілюється нормально, але при запуску видає помилку:
-1: помилка: /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/Scrt1.o: in function `_start':

Не розумію, що це таке.

4

Re: Qt6 CMake qt_add_translations

Ось такий CMakeLists запрацював (у попередньому забув перелічити файли правильно через set):

cmake_minimum_required(VERSION 3.5)

project(Movar_cpp VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 REQUIRED COMPONENTS Widgets LinguistTools WebEngineWidgets)

set(TS_FILES Movar_cpp_uk_UA.ts)

set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
        dictionarysettings.cpp
        dictionarysettings.h
        dictionarysettings.ui
        fileloader.cpp
        fileloader.h
        ${TS_FILES}
)

qt_standard_project_setup()

qt_add_executable(Movar_cpp MANUAL_FINALIZATION ${PROJECT_SOURCES})
qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
qt_add_translations(Movar_cpp ${TS_FILES})

target_link_libraries(Movar_cpp PRIVATE Qt6::Widgets)
target_link_libraries(Movar_cpp PRIVATE Qt6::WebEngineWidgets)

set_target_properties(Movar_cpp PROPERTIES WIN32_EXECUTABLE TRUE)

Але файл ts не заповнюється словами.

Подякували: leofun011

5

Re: Qt6 CMake qt_add_translations

А ще почало вилазити ось таке:

doh set to ""  --  SystemOnly
libva error: /usr/lib/dri/i965_drv_video.so init failed

Запуску програми воно не заважає, але зовнішній вигляд програми змінився дещо.

6

Re: Qt6 CMake qt_add_translations

Vitaliy_Danmer написав:

зовнішній вигляд програми змінився дещо.

Зовнішній вигляд не мав змінитися. Це може вказувати на те, що видалено забагато. Ймовірно якусь бібліотеку загубив по дорозі.

Чекай, той рядок

find_package(QT NAMES Qt6 Qt5 REQUIRED ...

був у файлі, який був створений тобою ?, чи створений середовищем автоматично ?
Якщо автоматично, то верни його туди, де був.
Проблема значить в іншому.

Рекомендую окремо вивчити GNU make, особливо ту частину що про Makefile. Потім вивчити cmake, особливо ту частину що про CMakeList.txt. Потім можна глянути на qmake для загального розвитку. Так, це довго-важко, за те потім з цими знаннями розробка йде на багато легше.

7 Востаннє редагувалося Teg Miles (30.11.2023 00:15:57)

Re: Qt6 CMake qt_add_translations

leofun01 написав:
Vitaliy_Danmer написав:

зовнішній вигляд програми змінився дещо.

Зовнішній вигляд не мав змінитися. Це може вказувати про те, що видалено забагато. Ймовірно якусь бібліотеку загубив по дорозі.

Чекай, той рядок

find_package(QT NAMES Qt6 Qt5 REQUIRED ...

був у файлі, який був створений тобою ?, чи створений середовищем автоматично ?
Якщо автоматично, то верни його туди, де був.
Проблема значить в іншому.

Рекомендую окремо вивчити GNU make, особливо ту частину що про Makefile. Потім вивчити cmake, особливо ту частину що про CMakeList.txt. Потім можна глянути на qmake для загального розвитку. Так, це довго-важко, за те потім з цими знаннями розробка йде на багато легше.

Розібрався. Треба було додати після всіх qt_create_translations(там вибір для різних версій) ось ці два рядка:

add_custom_target(translations DEPENDS ${QM_FILES})
add_dependencies(${CMAKE_PROJECT_NAME} translations)

Це примусова прив'язка CMake до обробки файлів зі словами на переклад, як я розумію.
Бо інакше він не хоче нічого робити.
Я повернув оригінальний створений автоматично CMakeLists і додав туди ці рядки.
Тепер усе працює, як раніше. Але з'явилося повідомлення Cannot find the example directory.
Не розумію до чого це.

Подякували: leofun011

8

Re: Qt6 CMake qt_add_translations

Vitaliy_Danmer написав:

з'явилося повідомлення Cannot find the example directory.
Не розумію до чого це.

Я знайшов тільки приклад з QDir. Пошукай в коді де ти його користуєш. Або стрічку "Cannot find the".

Подякували: Teg Miles1

9

Re: Qt6 CMake qt_add_translations

leofun01 написав:
Vitaliy_Danmer написав:

з'явилося повідомлення Cannot find the example directory.
Не розумію до чого це.

Я знайшов тільки приклад з QDir. Пошукай в коді де ти його користуєш. Або стрічку "Cannot find the".

Це після моїх експериментів з CMake шлях до файлу зберігся невірно(українська абетка не розпізналася).
Спрацювало else в завантаженні файлів, тому вийшло це повідомлення.
Уже виправив.