我经常在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本身。
答案 0 :(得分:3)
这是我最终达成的策略,到目前为止运作良好:
为解决“MyModule”问题,我在“dummyModules”子目录中创建了一个qml模块,其中包含MyModule的qml / javascript虚拟实现。我使用“-I dummyModules”运行qmlscene预览工具,使其可用于原型设计。当然,这些模块不包含在发行版中。
我还有几个从C ++设置的上下文属性。为了完成这些工作,我使用了qmlscene的“dummydata”功能。
我修改(黑客)qmlscene以在ctrl-r上重新加载场景。
这1)解决了“MyModule”问题而没有创建c ++插件(在我的情况下不切实际)和2)给我并排编辑和预览。
我怀疑这可能也适用于造物主“设计”模块。 IIRC它使用一个名为“qmlpuppet”的外部程序,它可能类似于qmlscene。但我还没试过。
答案 1 :(得分:1)
qmlRegisterType()
将使模块仅在可执行文件内部可用。因此,使用该模块的任何QML文件都无法通过qml预览工具加载。
您可以尝试创建一个独立的QML模块,其中包含qmldir
文件和可在运行时加载的C ++插件。只需按照documentation。