通用 QML 委托,但非通用视图附加属性?
Generic QML delegate, but non-generic View attached properties?
视图将属性附加到委托。对于 ListView,委托可以访问 ListView.view.width
和 ListView.isCurrentItem
属性:
Rectangle {
width: ListView.view.width
height: 40
color: ListView.isCurrentItem ? "gray" : "lightGray"
Text {
anchors.centerIn: parent
text: index
}
}
通过类型名称引用视图,委托似乎失去了通用性。
如果我想在 GridView 中使用同一个委托怎么办?
您应该从您的委托创建一个组件并在其实例化期间设置 property isCurrentItem
。换句话说,创建新的 qml 文件并将其命名为例如"Delegate.qml
" 并添加 property bool isCurrentItem
:
import QtQuick 2.4
Rectangle {
property bool isCurrentItem: false
width: parent.width
height: 20
color: isCurrentItem ? "gray" : "lightGray"
Text {
anchors.centerIn: parent
text: index
}
}
你可以像这样在 ListView 中使用它:
ListView {
model: 10
width: 40
height: 200
delegate: Delegate {
isCurrentItem: ListView.isCurrentItem
}
}
在 GridView 中类似:
GridView {
model: 10
width: 40
height: 200
delegate: Delegate {
isCurrentItem: ListView.isCurrentItem
}
}
您可以采用相同的方式提供 width
of ListView
/GridView
进行委托,但在这种情况下 parent.width
也将按照您想要的方式工作。
视图将属性附加到委托。对于 ListView,委托可以访问 ListView.view.width
和 ListView.isCurrentItem
属性:
Rectangle {
width: ListView.view.width
height: 40
color: ListView.isCurrentItem ? "gray" : "lightGray"
Text {
anchors.centerIn: parent
text: index
}
}
通过类型名称引用视图,委托似乎失去了通用性。
如果我想在 GridView 中使用同一个委托怎么办?
您应该从您的委托创建一个组件并在其实例化期间设置 property isCurrentItem
。换句话说,创建新的 qml 文件并将其命名为例如"Delegate.qml
" 并添加 property bool isCurrentItem
:
import QtQuick 2.4
Rectangle {
property bool isCurrentItem: false
width: parent.width
height: 20
color: isCurrentItem ? "gray" : "lightGray"
Text {
anchors.centerIn: parent
text: index
}
}
你可以像这样在 ListView 中使用它:
ListView {
model: 10
width: 40
height: 200
delegate: Delegate {
isCurrentItem: ListView.isCurrentItem
}
}
在 GridView 中类似:
GridView {
model: 10
width: 40
height: 200
delegate: Delegate {
isCurrentItem: ListView.isCurrentItem
}
}
您可以采用相同的方式提供 width
of ListView
/GridView
进行委托,但在这种情况下 parent.width
也将按照您想要的方式工作。