我有a QML project,当它位于同一目录中时效果很好。有main.qml
main.cpp
包含通常的内容:
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
还有我的自定义组件,纯QML,MyComponent.qml
。
当它包含在单个项目中时,它可以完美地运行。但现在我想考虑可重用性。
我希望为演示提供单独的main()
(现在有什么),单元测试和可用性测试。我希望能够彼此独立地运行这些。
我还想在其他项目中使用MyComponent.qml
而不这些main()
中的任何一个(这就是重点!)。
我不太喜欢这里的结构,我只想让演示代码与widget代码分开并拥有一个可重用的小部件。
我需要做些什么来实现这个目标?
我已阅读How to package custom controls in QML? ,但答案很清楚。我可以为Identified Module创建适当的文件,但我的单独项目如何实际访问和合并?
我试图将事情作为子项目进行安排,但并没有走得太远。如果我创建一个widget
子项目作为库项目,我有这个.pro
文件:
TEMPLATE = lib
TARGET = widget-lib
QT += core quick qml
CONFIG += c++11 plugin
DISTFILES += \
MyComponent.qml
然后项目无法构建,因为没有实际的库或入口点,或者实际上根本没有任何代码:
LINK : error LNK2001: unresolved external symbol __DllMainCRTStartup@12
debug \ widget-lib.dll:致命错误LNK1120:1个未解析的外部
Qt Creator中提供的唯一其他项目类型是QML / C ++插件,但由于我的实际组件中没有C ++代码,因此似乎不适用。
将MyComponent.qml
文件添加到demo
子项目也会失败。有了这个QRC文件:
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>../widget/MyComponent.qml</file>
</qresource>
</RCC>
...构建的演示项目无法找到MyComponent.qml
,因为../widget/
在构建输出路径中不存在。
将widget
子项目添加为库也会失败,因为没有要链接的实际共享库,因此无法构建demo
。
我已阅读Module Definition qmldir Files,但它完全是关于如何创建文件的,并且没有任何关于如何使用它的信息。
我如何重用一个&#34;可重复使用的QML组件&#34;?如何在其他项目中使用组件本身,或者有多个小型项目来测试组件本身?如何在不将组件QML文件复制粘贴到需要它的每个项目中的情况下实现这一目标?