【发布时间】:2017-12-15 07:56:19
【问题描述】:
我在 Mac OS 上使用 QT 5.9.1。我的项目是具有 C++ 逻辑和 QML UI 层的移动应用程序。所有 QML 文件都包含在 qml.qrc 文件中,所以在我的 .pro 文件中有
资源 += qml.qrc
在qml.qrc里面有一个我在Project中使用的所有资源文件的列表,比如图片、图标和QML文件,在QT Creator中显示OK:
你可以看到一些 QML 文件位于 qml.qrc 的 ROOT 路径中,而其他文件位于子文件夹中,例如“qrc:/Elements/”。
所以问题是,当我对位于 qml.qrc 根目录中的文件进行更改时,它们通常会在我按下 build、rebuild 或 clean and build 时重新编译,因此我可以看到我的更改。结果,在我的构建目录中,我看到 qml_qrc.cpp(据我所知,该文件包含我的资源文件的 cpp 表示并用于编译它们)文件已刷新,我的更改已应用并且一切正常。
这里只是这个文件的一部分,它以 MainPage.qml 资源文件的 cpp 十六进制表示开始。
/**************************************************** ****************************** ** 资源对象代码 ** ** 创建者:Qt 版本 5.9.1 的资源编译器 ** ** 警告!在此文件中所做的所有更改都将丢失! ****************************************************** ******************************/
static const unsigned char 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 文件)。因此,然后按“构建”将创建新的 qml_qrc.cpp 文件,该文件将包含正确的代码,以及我在资源文件中所做的更改。
谁能帮助我或解释为什么会发生这种情况以及在这种情况下我该怎么办?手动删除和重建很烦人,但是将所有资源文件放在项目的根路径中也不是一个好的决定...
我也尝试过粘贴
更新 qml
qml_scenes.depends = $$PWD/QML Files/OrdersPage.qml
qml_scenes.commands = QMAKE_EXTRA_TARGETS += qml_scenes
如here 所述,但没有帮助
【问题讨论】:
-
@Mitch 但运行 qmake 和重新构建对我来说没有帮助:(还有问题仅存在于子文件夹中的资源文件的细节,对于位于根目录的文件,一切正常
-
@eyllanesc 谢谢,但解决方法粘贴 #update qml qml_scenes.depends = $$PWD/QML Files/OrdersPage.qml qml_scenes.commands = QMAKE_EXTRA_TARGETS += .pro 文件中的 qml_scenes 不起作用,qml更改后子文件夹中的资源仍未重建
标签: qt build resources qml qmake