linux 如何用QML编写条件导入语句?

vxbzzdmp  于 2023-01-25  发布在  Linux
关注(0)|答案(3)|浏览(145)

就像我们在C++中有预处理器指令,用于条件包含。
类似地,如何在QML中执行条件import ing?

if x  
    import ABC 1.0  
else  
    import PQR 2.0
6ie5vjzr

6ie5vjzr1#

根据你想要达到的目标,一个可能的解决方案是使用Loader,但是它不导入模块,它只允许动态地选择你要使用的QML组件。

Loader
{
    source: condition?"RedRectangle.qml":"BlueRectangle.qml"
}
wz3gfoph

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")
}
mwyxok5s

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 )

相关问题