Але*_*хин 8 resources qt qmake build qml
我正在使用QT 5.9.1在Mac OS上工作.我的项目是带有C++逻辑和QML UI Layer的移动应用程序.所有QML文件都包含在qml.qrc文件中,因此在我的.pro文件中
RESOURCES + = qml.qrc
在qml.qrc里面有一个我在Project中使用的所有资源文件的列表,比如图片,图标和QML文件,在QT Creator中显示OK:
正如您所看到的,当其他文件位于子文件夹中时,一些QML文件位于qml.qrc的ROOT路径中,例如"qrc:/ Elements /".
所以问题是我在位于qml.qrc的根目录中的文件中进行了更改 - 当我按下构建,重建或清理和构建时,它们通常会被重新编译,所以我可以看到我的更改.因此,在我的构建目录中,我看到qml_qrc.cpp(因为我理解这个文件包含我的资源文件的cpp表示并用于编译它们)文件被刷新,我的更改被应用,一切正常.
这里只是这个文件的一部分,它以MainPage.qml资源文件的cpp十六进制表示开头.
/************************************************资源对象代码****创建者:Qt版本5.9.1的资源编译器****警告!此文件中所做的所有更改都将丢失!*****************************************************************************/
静态常量无符号字符qt_resource_data [] = {// /Users/admin/QtProjects/LazuritApp-temp/MainPage.qml
0x0,0x0,0x7,0xd1,为0x0,
0x0,0x1e,为0xBB,0x78,0x9c,0xd5,0x19,0x5d ,0x6f,0xdc,0x36,0xf2,0x7d,0x7f,0x5,0x6f,0xb,0x14,0xbb,0x69,0xa2,0xf5,0xae,0xed,0xa4,0xde,0xa0,0x77,0xf0,0xba,0x49,0x63,0x20 ,0x45,0xda,0xda,0x68,0x1e,0xe,0x45,0xc1,0x95,0xa8,0x15,0x2f,0x5a,0x51,0xa5,0x24,0xdb,0x5b,0xc3,0x40,0xda,0x2,0xed,0x1,0x79 ,0x28,0x70,0x68,0x71,0xcf,0xf7,0xf,0xdc,0xbb,0x6b,0x1b,0x34,0x4d,0xfa,0x17,0xb4,0xff,0xa8,0x43,0x52,0x5f,0x94,..............
但是,如果我更改位于子文件夹中的资源文件,qml_qrc.cpp文件不会刷新,因此我的资源文件不会重建,即使我尝试清理,然后重建.即使我手动"运行qmake"然后重建.唯一有用的是在这种情况下 - 手动删除构建文件夹(或者更确切地说,您可以删除qml_qrc.cpp文件).因此,按"Build"将创建新的qml_qrc.cpp文件,该文件将包含正确的代码,我在资源文件中进行了更改.
有人可以帮助我或解释为什么会发生这种情况,在这种情况下我该怎么办?手动删除和重建很烦人,但将所有资源文件放在项目的根路径中也不是一个好的决定......
我也尝试过粘贴
更新qml
qml_scenes.depends = $$ PWD/QML Files/OrdersPage.qml
qml_scenes.commands = QMAKE_EXTRA_TARGETS + = qml_scenes
正如这里所描述的,但它没有帮助
好吧,在 QTBUGS 痕迹、stackoverflow 和其他论坛上进行了数小时的挖掘之后,我找到了解决方案,这在某种程度上让我感到满意。
1)使用 qml.qrc 文件的“touch”命令创建脚本文件(对于我来说,它是 .sh 文件,因为我在 MAS 操作系统上工作,对于 Windows 来说,它将是 .bat 文件)。就我而言,它包含两行:
#!/bin/sh
触摸qml.qrc
2) 添加自定义构建步骤(项目->构建设置->构建步骤->添加自定义流程步骤)。选择您创建的 .sh 文件,选择构建所在的工作目录。使此自定义步骤成为第一个执行的步骤(在 qmake 和 Make 之前)
3)因此,现在每次构建项目时都会编译 qml 资源文件中的更改。脚本将首先触及我们的 qml.qrc 文件,这将刷新它的修改日期,以便 qml.qrc (因此,我们的 qml 资源)将被添加到 makefile 依赖项中。
这似乎是解决问题的相当粗略的方法,但至少你不必清理、重建等等。
如果有人有更好的解决方案,请告诉我)