Как добавить путь в файл qt .pro через DEFINE - PullRequest
1 голос
/ 04 июня 2019

Я хочу добавить путь к моей папке переводов в .pro-файле, к которой можно получить доступ из частей C ++ / QML, а также использовать внутри .pro-файла.

Я наткнулся на функцию DEFINES + = и заставил ее работать с примером для числа PI. Это определение можно вызвать из C ++ с помощью qDebug () <

Теперь у меня есть папка с переводами на два каталога выше .pro-файла, который называется translations. Поэтому я попытался использовать что-то вроде этого:

DEFINES += "TRANSPATH=\"../../translations\""

Но когда я пытаюсь получить к нему доступ через qDebug, я получаю ошибки - ожидаемое первичное выражение а также ожидаемый безусловный идентификатор перед "." лексема

В моем файле .pro я тоже хочу получить доступ к TRANSPATH, но используя его как

 TRANSLATIONS += \
     $$(TRANSPATH)/test_TEST.ts \
     ../../translations/de_DE.ts \
     ../../translations/zh_CN.ts
 }

только приводит к этой ошибке:

  Updating '../../../../../../../test_TEST.ts'...
      Found 63 source text(s) (63 new and 0 already existing)
  Cannot create /test_TEST.ts: Zugriff verweigert  
  Updating '../../translations/de_DE.ts'...
      Found 63 source text(s) (0 new and 63 already existing)

Я пытался найти другие примеры в Интернете, но не нашел ничего полезного. В переводе + = часть я изменил формулировку на:

  TRANSPATH/test_TEST.ts
  {TRANSPATH}/test_TEST.ts 
  $$TRANSPATH/test_TEST.ts
  $${TRANSPATH}/test_TEST.ts

но ничего не получалось. Это первый раз, когда я пытаюсь определить что-то, может, я делаю это неправильно? Пожалуйста, помогите

Пример кода / .pro файл:

 # this file will be loaded from the main import path
  MAIN_QML_FILE = main.qml
  INCLUDEPATH += ./Plugins
  INCLUDEPATH += ./qml
  DEFINES += "PI=\"3.1415926\""
  DEFINES += "TRANSPATH=\"../../translations\""
  QT += core
  # this is only seen by the linguist tools (lupdate)
  lupdate_only{
  SOURCES = \
      ../../qml/Widgets/SomeFiles/*.qml

  TRANSLATIONS += \
      $$(TRANSPATH)/test_TEST.ts \
      ../../translations/de_DE.ts \
      ../../translations/zh_CN.ts
  }

TRANSPATH должен приводить к той же папке, что и ../../translations/de_DE.ts путь делает. Путь будет повторно использоваться из C ++ для пользовательского объекта QTranslator.

1 Ответ

2 голосов
/ 04 июня 2019

Во-первых, эта ошибка из qmake:

Cannot create /test_TEST.ts: Zugriff verweigert

приходит отсюда:

$$(TRANSPATH)/test_TEST.ts

Вы ссылаетесь на неопределенную переменную , т. Е. TRANSPATH. Когда вы делаете это:

DEFINES += "TRANSPATH=\"../../translations\""

вы не определяете переменную : вы добавляете определение в командную строку компилятора, используя флаг -D (вы можете проверить это на панели вывода компиляции в создателе).

Итак, просто имеет переменную qmake :

TRANSPATH = ../../translations

Теперь вы можете использовать его в другом месте вашего профессионального файла, например,

  TRANSLATIONS += \
      $$(TRANSPATH)/test_TEST.ts \
      ../../translations/de_DE.ts \
      ../../translations/zh_CN.ts
  }

Вы также можете использовать его в DEFINES, но позаботьтесь о побеге:

DEFINES += "TRANSPATH=\\\"$$TRANSPATH\\\""

В вашем компиляторе вы найдете

-DTRANSPATH=\"..\..\translations\"

вместе с другими флагами.

Теперь вы можете смело делать

qDebug() << TRANSPATH; 

в вашем исходном коде.

...