将项添加到自定义组件的布局

时间:2015-07-24 14:10:26

标签: qt qml qtquick2

我有自定义a :a => :b # => SyntaxError: (irb):103: syntax error, unexpected ':', expecting end-of-input a a: :b # => SyntaxError: (irb):105: syntax error, unexpected ':', expecting end-of-input Footer,我想在我的QML应用中的不同位置重复使用:

Component

使用这个很容易:

Rectangle {
    color: "gold"
    height: 50
    anchors {
        bottom: parent.bottom
        left: parent.left
        right: parent.right
    }

    RowLayout {
        anchors.fill: parent
        anchors.margins: 10

        Button {
            text: "quit"
        }
    }
}

但现在我想在一个视图中向Window { visible: true Footer { } } 的{​​{1}}添加“ButtonA”,在另一个视图中添加“ButtonB”。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

请参阅this回答。

您必须在default中声明Footer.qml属性:

import QtQuick 2.0
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.1

Rectangle {
    color: "gold"
    height: 50

    default property alias content: rowLayout.children

    anchors {
        bottom: parent.bottom
        left: parent.left
        right: parent.right
    }

    RowLayout {
        id: rowLayout
        anchors.fill: parent
        anchors.margins: 10

        Button {
            text: "quit"
        }
    }
}

这可确保声明为Footer个实例的子项的任何项目都会添加到其RowLayout

<强> main.qml

import QtQuick 2.4
import QtQuick.Controls 1.3

ApplicationWindow {
    width: 640
    height: 480
    visible: true

    StackView {
        id: stackView
        anchors.fill: parent
        initialItem: viewAComponent
    }

    Component {
        id: viewAComponent

        Rectangle {
            id: viewA
            color: "salmon"

            Footer {
                id: footerA

                Button {
                    text: "Go to next view"
                    onClicked: stackView.push(viewBComponent)
                }
            }
        }
    }

    Component {
        id: viewBComponent

        Rectangle {
            id: viewB
            color: "lightblue"

            Footer {
                id: footerB

                Button {
                    text: "Go to previous view"
                    onClicked: stackView.pop()
                }
            }
        }
    }
}

我使用StackView作为在视图之间导航的便捷方式。