我想将QtGraphicalEffect ColorOverlay
应用于Image
委托中的Repeater
。问题是我必须将id
的{{1}}设置为Image
的{{1}},但我不知道source
,因为它是由ColorOverlay
动态创建的。
id
如何设置Repeater
和import QtQuick 2.4
import QtGraphicalEffects 1.0
Item {
id:mainItem
width: 800
height: 400
property string vorneColor: "red"
ListModel {
id: safeRailModel
ListElement {name: "vorne"; imageSource:"images/saferail/ring_vorne.png";}
ListElement {name: "vorneLinks"; imageSource:"images/saferail/ring_vorne_links.png"; }
}
Component {
id: imageDelegate
Image {
source: imageSource
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
fillMode: Image.PreserveAspectFit
opacity: 1
visible: true
}
}
Repeater {
id: safeRailRepeater
model: safeRailModel
delegate: imageDelegate
}
Component {
id: effectsDelegate
Item{
id:effectsItem
ColorOverlay {
anchors.fill: safeRailRepeater.itemAt(index)// <-- This doesn't work
source: safeRailRepeater.itemAt(index)// <-- This doesn't work
color: vorneColor
}
}
}
Repeater {
id: safeRailEffectsRepeater
model: safeRailModel
delegate: effectsDelegate
}
}
属性?
我到处搜索,但我只发现source
或anchors.fill
的内容,但前者和后者都没有。
附注:safeRailRepeater.itemAt(index)
不需要在单独的委托和safeRailRepeater.itemAt(index).item
中。
如果有人能解决这个问题,或者能指出正确的方向,那就太好了。
非常感谢!
答案 0 :(得分:2)
问题是itemAt()
函数调用返回null
,因为另一个Repeater
尚未加载其项目。此外,函数调用永远不会被重新评估,因为它的参数都没有改变,所以你总是得到null
。
虽然设计有点奇怪;我建议将ColorOverlay
移到同一个代理中,正如您所提到的那样,它不必单独放在Repeater
中:
import QtQuick 2.0
import QtQuick.Window 2.0
import QtGraphicalEffects 1.0
Window {
id: mainItem
width: 800
height: 400
visible: true
property string vorneColor: "red"
ListModel {
id: safeRailModel
ListElement { name: "vorne"; vorneColor: "salmon"; }
ListElement { name: "vorneLinks"; vorneColor: "steelblue"; }
}
Component {
id: imageDelegateComponent
Rectangle {
id: delegate
color: "grey"
opacity: 1
visible: true
width: 64
height: 64
layer.enabled: true
layer.effect: ColorOverlay {
color: vorneColor
}
}
}
Row {
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
Repeater {
id: safeRailRepeater
model: safeRailModel
delegate: imageDelegateComponent
}
}
}
使用Item
Image
API是指定图形效果的便捷方式。
我还将Rectangle
更改为Repeater
,因为我们无权访问这些图片,并将send, abc
放在一行中,以便您可以看到所有代表们。