如何组织纯QML项目以实现可重用性?

时间:2018-02-28 22:11:48

标签: qt qml qt-creator qmake

我有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文件复制粘贴到需要它的每个项目中的情况下实现这一目标?

0 个答案:

没有答案