通用QML委托,但非通用的View附加属性?

时间:2015-01-19 04:08:30

标签: qt qml

视图将属性附加到委托。对于ListView,委托可以访问ListView.view.widthListView.isCurrentItem属性:

Rectangle {
  width: ListView.view.width
  height: 40

  color: ListView.isCurrentItem ? "gray" : "lightGray"

  Text {
    anchors.centerIn: parent       
    text: index
  }
}

通过类型名称引用View,似乎委托失去了它的通用性。

如果我想在GridView中使用相同的委托怎么办?

1 个答案:

答案 0 :(得分:2)

您应该从代理中创建一个Component,并在实例化期间设置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 ListViewGridView / parent.width代理,但在这种情况下,{{1}}也可以按照您想要的方式运行。