Как разделить код QML на несколько файлов?

Я только начал играть с QML и вижу, что у меня есть куча следующих компонентов:

Window {
    ....
    property Component dateTumbler: ControlView {
        // Definition follows
    }

    property Component timeTumbler: ControlView {
       // More definition follows
    }

    // More controls
}

Это делает основной файл QML очень длинным и громоздким для редактирования и обслуживания. Я попытался разделить это на разные файлы следующим образом:

// DateTumblerView.qml
component: DateTumblerView { // Not sure how to inherit here..
    // Definition here
}

Я пытаюсь использовать это так:

property component dateTumbler: DateTumblerView {}

Однако это никогда не работает, и DateTumblerView никогда не находят. Я не уверен, правильно ли я это делаю.

[EDIT] ControlView определяется следующим образом:

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtMultimedia 5.5

Rectangle {
    id: view
    property bool darkBackground: false

    Text {
        id: textSingleton
    }

    SoundEffect {
        id: playCalSound
        source: "qrc:/sound/test.wav"
    }
}

[КОНЕЦ РЕДАКТИРОВАТЬ]

Как правильно разделить код QML на несколько файлов?


person Luca    schedule 31.01.2016    source источник


Ответы (1)


Ваш файл DateTumblerView.qml должен выглядеть так:

ControlView {
   // More definition follows
}

И вы бы использовали его так:

property Component dateTumbler: DateTumblerView {}

Or:

Component {
    id: dateTumbler

    DateTumblerView {}
}

Или, если вы хотите использовать его напрямую:

DateTumblerView {}

Это почти то же самое, как если бы ваш код был только в одном файле. Каждый раз, когда вы делаете <Type> {}, вы наследуете этот тип и можете устанавливать или добавлять новые свойства, функции и подкомпоненты. Отличие в том, что он находится в отдельном файле, имеет определенное имя (имя файла), и вы можете повторно использовать этот код столько раз, сколько захотите.

Дополнительные сведения см. в разделе Определение пользовательских Типы QML для повторного использования.

person iBelieve    schedule 31.01.2016
comment
Спасибо за ответ. Я попытался это сделать, и он жалуется, что ControlView не является типом. Я добавляю определение ControlView в свой исходный пост. - person Luca; 01.02.2016
comment
Не обращайте внимания на мой последний комментарий... это произошло потому, что я не умею писать. нужен мой первый кофе... - person Luca; 01.02.2016