通用 QML 委托,但非通用视图附加属性?

Generic QML delegate, but non-generic View attached properties?

视图将属性附加到委托。对于 ListView,委托可以访问 ListView.view.widthListView.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 也将按照您想要的方式工作。