Создание "родного" типа QML динамически - PullRequest
0 голосов
/ 02 марта 2019

Можно ли динамически выбирать различные типы подкомпонентов (во время создания экземпляра)?

Например, некоторый псевдокод (используя 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
    ...
   }
 }

1 Ответ

0 голосов
/ 02 марта 2019

Я не думаю, что есть способ сделать именно то, что вы хотите, без большого количества javascript.Самым чистым способом сделать это, о котором я могу подумать, было бы следующее.Вы можете сделать ColumnLayout невидимым и установить Column как родительский элемент его дочерних элементов примерно так:

//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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...