动态实例化 "native" QML 类型



是否可以动态(实例化期间)在不同类型的子组件之间选择?

例如,一些伪代码(使用QT 5.9):

 //MyComp.qml
 import QtQuick 2.9
 import QtQuick.Layouts 1.3          
 Item {
   property bool useLayout: true
   //Here I want to allow the user to choose
   //whether a ColumnLayout or Column is used 
   //(e.g., by means of the useLayout property)
   ColumnLayout { //Or Column
     ...
   }
 ...
 }     

 //main.qml
 import QtQuick 2.9
 import QtQuick.Layouts 1.3
 import QtQuick.Controls 2.9
 ApplicationWindow {
 width: 640
 height: 480
 ...
  MyComp {
    id: a
    useLayout: false
    ...
   }
 }

我认为没有很多JavaScript的方法没有办法做您想要的事情。我能想到的最干净的方法是以下内容。您可以使列Layout不可见,并将列视为其子女的父母,并以这样的方式将列设置为:

//MyComp.qml
import QtQuick 2.9
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.5
Item {
    property bool useLayout: true

    ColumnLayout {
        id: columnLayout
        visible: useLayout
        Component.onCompleted: {
            if (!useLayout) {
                butt1.parent = column;
                butt2.parent = column;
                butt3.parent = column;
            }
        }
        Button {
            id: butt1
            text: "butt 1"
        }
        Button {
            id: butt2
            text: "butt 2"
        }
        Button {
            id: butt3
            text: "butt 3"
        }
    }
    Column {
        id: column
        visible: !useLayout
    }
}

最新更新