我有自定义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”。
我怎样才能做到这一点?
答案 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
作为在视图之间导航的便捷方式。