如何通过DEFINE在qt .pro文件中添加路径

时间:2019-06-04 11:03:19

标签: qt qmake

我想在.pro文件中的我的translations文件夹中添加路径,该路径可以从C ++ / QML部件访问,也可以在.pro文件中使用。

我遇到了DEFINES + =函数,并使用一个数字PI的示例进行了处理。可以使用qDebug()从C ++调用此定义。

现在,我在.pro文件上方的两个目录中有一个translations文件夹,这就是Translations。因此,我尝试使用类似以下的内容:

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

但是当我尝试通过qDebug访问它时,我得到了错误 -预期的主要表达 和 -预期在“。”之前的不合格ID。令牌

在我的.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 个答案:

答案 0 :(得分:2)

首先,来自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; 

在您的源代码中。