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

Tyl*_*iel 3 qt qt-creator qml

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

例如,在 C++ 中:

qmlRegisterType<CustomVideoSource>("MyModule", 1, 0, "CustomVideoSource");
Run Code Online (Sandbox Code Playgroud)

在 QML 中:

CustomVideoSource { id: customSource }
VideoOutput { source: customSource; anchors.fill: ... }
Run Code Online (Sandbox Code Playgroud)

“qmlscene”外部预览工具退出并出现错误“模块“MyModule”未安装”。

设计视图在简单情况下可用作预览,在复杂情况下不可用,但无论如何都很慢,而且我无法同时编辑代码和查看预览。

我知道“虚拟上下文”的概念,但 1)不知道它在这种情况下如何应用,2)从来没有运气让它在其他情况下实际工作。

有人有好的工作流程吗?也许我根本不应该这样做?

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

更新/澄清:

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

我正在考虑纯粹出于预览目的制作一个假插件,并通过 -I 将其传递给 qmlscene。还修改 qmlscene 本身。

Tyl*_*iel 5

这是我最终采取的策略,到目前为止效果很好:

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

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

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

这 1) 解决了“MyModule”问题,无需创建 C++ 插件(在我的情况下不切实际),2) 为我提供了并排编辑和预览。

我怀疑这也可以与创建者“设计”模块很好地配合。IIRC 它使用一个名为“qmlpuppet”的外部程序,它可能类似于 qmlscene。但我没试过。