Как Интегрировать файлы Qt4 qm в двоичный файл с помощью cmake и QRC?

У меня есть проект Qt4 CMake, и я хотел бы интегрировать файлы QM для i18n в выходной двоичный файл. Это правила, которые я имею до сих пор для генерации TS и файлов QM:

set(myapp_TRANSLATIONS
    i18n/myapp_de.ts
)

set(FILES_TO_TRANSLATE
    ${myapp_SRCS}
    ${myapp_MOC_HDRS}
)

QT4_CREATE_TRANSLATION(QM_FILES ${FILES_TO_TRANSLATE} ${myapp_TRANSLATIONS})
QT4_ADD_TRANSLATION(QM ${myapp_TRANSLATIONS})

Я попробовал следующее для добавления файлов QM к исполняемому файлу:

add_executable(myapp ${myapp_SRCS} ${myapp_MOC_SRCS} ${myapp_RCC_SRCS} ${QM})

Это - инициализация от main.cpp:

QTranslator qtTranslator;
qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
app.installTranslator(&qtTranslator);

QTranslator appTranslator;
appTranslator.load("myapp_" + QLocale::system().name());
app.installTranslator(&appTranslator);

Однако strings mypp шоу, что переводы не входят в двоичный файл.

Обновление: Я добавил каждый qm файл к a i18n/translations.qrc:

<!DOCTYPE RCC><RCC version="1.0">
  <qresource prefix="/resources">
    <file>myapp_de.qm</file>
    <file>  ...   .qm</file>
  </qresource>
</RCC>

и использование

QT4_ADD_RESOURCES(myapp_QM_RCC_SRCS i18n/translations.qrc)

и добавление myapp_QM_RCC_SRCS к исполняемым зависимостям.

Но это перестало работать в течение времени изготовления благодаря тому, что CMake делает теневую сборку (создающий вне исходного dir), но анализирует файлы QRC для зависимостей, ожидающих файлы, на которые ссылаются, относительно файла QRC (хорошая функция, но существует, не делают правило, как создать файл QM в том местоположении). Файлы QM находятся в ${CMAKE_CURRENT_BINARY_DIR} (где они принадлежат с помощью здания тени), но ожидает это в ${CMAKE_CURRENT_SOURCE_DIR} (где несгенерированные файлы должны быть - таким образом, оба места были бы корректны, в зависимости от ситуации).

12
задан hurikhan77 6 July 2010 в 14:38
поделиться

1 ответ

Вам необходимо использовать систему ресурсов Qt, чтобы включить ваш перевод непосредственно в двоичный файл вашего приложения. Для этого используйте макрос QT4_ADD_RESOURCES. Вот пример его использования: http://www.qtcentre.org/wiki/index.php?title=Compiling_Qt4_apps_with_CMake

0
ответ дан 2 December 2019 в 19:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: