首页 > 解决方案 > 有没有办法在 Qt5 qml 中做 C++ 宏?

问题描述

我有两个 qml 插件,我只想在运行时或启动应用程序时导入选择的插件,以便我可以使用单个变量来表示其中一个插件。例如,我想要类似于使用 C++ MACRO 但在 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
...

我可以让它工作的方法是创建第三个插件 generic_plugin_C,我在 qml 中导入它,然后将该插件从 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,当时选择了哪个插件。

标签: qtqmlqt5

解决方案


在我看来,要走的路是通过 Loader 有条件地加载 qml 文件。这些文件每个都有自己不同的导入。

有关详细信息,请参阅此答案:https ://stackoverflow.com/a/52434062/1423877 。


推荐阅读