我有两个 qml 插件,我只想在运行时或启动应用程序时导入所选插件,以便我可以使用单个变量来表示任何一个插件。例如,我想要类似于使用 C++ 宏但在 qml 中的东西,例如:
#ifdef WHICH_PLUGIN
import generic_plugin_A 1.0 as myPlugin
#else
import generic_plugin_B 1.0 as myPlugin
#endif
...
// then I can use myPlugin for calls/signals/... as long as both generic plugins have the same UI interface
...
我可以让它工作的方法是创建我在 qml 中导入的第三个插件generic_plugin_C然后将该插件从 UI 连接到 generic_plugin_A/B。我只是想知道是否有一种不同或更清洁的方法来做到这一点会更好。
我正在尝试的一种不同方法是使用 qmlResisterType 在 main.cpp 中实现这一点:
main.cpp
:
...
if (WHICH_PLUGIN)
qmlRegisterType<PluginA_ClassName>("genericplugin", 1, 0, "PluginA_ClassName");
else
qmlRegisterType<PluginB_ClassName>("genericplugin", 1, 0, "PluginB_ClassName");
...
然后在我的 qml 文件中:
import genericplugin 1.0
...
genricplugin.funcCall()
...
我希望在 qml 中使用相同的变量名称和信号/qproperty/invokable/etc,当时为哪个插件选择了任何插件。
在我看来,要走的方法是有条件地通过加载器加载 qml 文件。这些文件可以有自己不同的导入。
有关详细信息,请参阅此答案:https://stackoverflow.com/a/52434062/1423877。