如何预览引用c ++类型的qml文档?

时间:2015-11-29 06:19:16

标签: qt qml qt-creator

我经常在QML文档中使用c ++中运行时定义的类型。它运行良好,但不适用于Qt Creator中的设计视图或外部预览工具。

例如,在c ++中:

qmlRegisterType<CustomVideoSource>("MyModule", 1, 0, "CustomVideoSource");

在QML中:

CustomVideoSource { id: customSource }
VideoOutput { source: customSource; anchors.fill: ... }

&#34; qmlscene&#34;外部预览工具退出错误&#39;模块&#34; MyModule&#34;未安装&#39;。

设计视图在简单的情况下可用作预览,在复杂的情况下无法使用,但在任何情况下都很慢,我无法编辑代码并同时查看预览。

我知道&#34;虚拟背景&#34;概念,但1)在这种情况下不知道它是如何适用的,2)从来没有太多的运气让它在其他情况下真正起作用。

有没有人有良好的工作流程?也许我不应该以这种方式做事?

顺便说一句,我知道Qt论坛,我也可能会在那里问。如果我能在他们没有下来/破坏时抓住他们。

更新/澄清:

我知道在C ++中实现QML扩展的选项。我的问题不是关于这样做的机制,而是关于如何最好地处理上述情况,例如,我想在运行时注册一个类型,但仍然可以快速预览UI工作。

我考虑将纯假插件纯粹用于预览,并通过-I传递给qmlscene。同时修改qmlscene本身。

2 个答案:

答案 0 :(得分:3)

这是我最终达成的策略,到目前为止运作良好:

  1. 为解决“MyModule”问题,我在“dummyModules”子目录中创建了一个qml模块,其中包含MyModule的qml / javascript虚拟实现。我使用“-I dummyModules”运行qmlscene预览工具,使其可用于原型设计。当然,这些模块不包含在发行版中。

  2. 我还有几个从C ++设置的上下文属性。为了完成这些工作,我使用了qmlscene的“dummydata”功能。

  3. 我修改(黑客)qmlscene以在ctrl-r上重新加载场景。

  4. 这1)解决了“MyModule”问题而没有创建c ++插件(在我的情况下不切实际)和2)给我并排编辑和预览。

    我怀疑这可能也适用于造物主“设计”模块。 IIRC它使用一个名为“qmlpuppet”的外部程序,它可能类似于qmlscene。但我还没试过。

答案 1 :(得分:1)

qmlRegisterType()将使模块仅在可执行文件内部可用。因此,使用该模块的任何QML文件都无法通过qml预览工具加载。

您可以尝试创建一个独立的QML模块,其中包含qmldir文件和可在运行时加载的C ++插件。只需按照documentation