Создание вкладки и экрана загрузки для того же в qml - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь создать вкладку, а затем загрузить соответствующий экран для этого, но когда я пытаюсь поместить некоторые компоненты внутри экрана вкладки, не удается этого достичь. Как это возможно?

Ниже приведен фрагмент кода для созданной вкладки. Нужно предложение, как динамически создать соответствующий экран для каждой вкладки.

    Rectangle
{
    width: Screen.width
    height: Screen.height

    property variant tabname: ["tab1","tab2","tab3"]
    property variant tabScreen: ["Screen1","Screen2", "Screen3"]

    function setTabName(name)
    {
        tabname = name
    }

    function setTabScreen(screen)
    {
        tabScreen = screen
    }

    TabBar
    {
        id: bar
        width: parent.width

        Repeater
        {
            model: tabname.length
            TabButton
            {
                text: tabname[index]
            }
        }
    }

    StackLayout
    {
        id: stacklyt
        width: parent.width
        height: parent.height
        currentIndex: bar.currentIndex
        anchors.top: bar.bottom

        Repeater
        {
            model: tabScreen.length
            Rectangle
            {
                id: tabRect
                color: "gray"
                Layout.preferredWidth: 10
                Layout.preferredHeight: 20

                Text {
                    id: name
                    text: tabScreen[index]
                    anchors.centerIn: parent
                }
            }
        }
    }


    Component.onCompleted:
    {
        setTabName(tabname)
        setTabScreen(tabScreen)
    }

}

1 Ответ

1 голос
/ 24 апреля 2020

Добавьте id свойство к Rectangle, и где бы вы ни ссылались на tabName или tabScreen, используйте это id:

Rectangle
{
    id: rect
    ...
    property variant tabName: ["tab1","tab2","tab3"]
    property variant tabScreen: ["Screen1","Screen2", "Screen3"]

    TabBar
    {
        ...
        Repeater
        {
            model: rect.tabName
            TabButton
            {
                text: rect.tabName[index]
            }
        }
    }

    StackLayout
    {
        ...

        Repeater
        {
            model: rect.tabScreen
            Rectangle
            {
                ...

                Text {
                    id: name
                    text: rect.tabScreen[index]
                    anchors.centerIn: parent
                }
            }
        }
    }
}

Во-вторых, свойство model должно быть правильной коллекцией , а не длина коллекции (см. код). Кроме того, для чего нужны функции setTabName и setTabScreen? Вам не нужны они, чтобы достичь вашей цели, насколько я понимаю ваш вопрос.

...