就像我们在C++中有预处理器指令,用于条件包含。类似地,如何在QML中执行条件import ing?
import
if x import ABC 1.0 else import PQR 2.0
6ie5vjzr1#
根据你想要达到的目标,一个可能的解决方案是使用Loader,但是它不导入模块,它只允许动态地选择你要使用的QML组件。
Loader { source: condition?"RedRectangle.qml":"BlueRectangle.qml" }
wz3gfoph2#
把“Yoann”的回答延伸了一点:
Loader { source: x?"ABC.qml":"PQR.qml" }
其中ABC.qml:
import ABC 1.0 ...
和PQR.qml:
import PQR 2.0 ...
或者如果没有真实的的qml文件,你可以在运行时创建它们:
Loader{ source:x ? Qt.createQmlObject('import ABC 1.0;',parentItem,"dynamicSnippet1") : Qt.createQmlObject('import PQR 2.0;',parentItem,"dynamicSnippet1") }
mwyxok5s3#
如果您需要找到一个更动态的解决方案来解决最初构建QML组件时包含“硬”导入的问题,我建议您查看:https://doc.qt.io/qt-5/qtqml-javascript-dynamicobjectcreation.html值得注意的是,我只是使用了类似下面的内容来解决我当前的用例:
property bool myDynamicSwitch : true property var myDynamicComponent :( myDynamicSwitch ? Qt.createComponent( "qrc:/MyCoolComponent.qml" ) : null ) property var myDynamicObject :( myDynamicComponent ? myDynamicComponent.createObject( root ) : null )
3条答案
按热度按时间6ie5vjzr1#
根据你想要达到的目标,一个可能的解决方案是使用Loader,但是它不导入模块,它只允许动态地选择你要使用的QML组件。
wz3gfoph2#
把“Yoann”的回答延伸了一点:
其中ABC.qml:
和PQR.qml:
或者如果没有真实的的qml文件,你可以在运行时创建它们:
mwyxok5s3#
如果您需要找到一个更动态的解决方案来解决最初构建QML组件时包含“硬”导入的问题,我建议您查看:
https://doc.qt.io/qt-5/qtqml-javascript-dynamicobjectcreation.html
值得注意的是,我只是使用了类似下面的内容来解决我当前的用例: