Qt 更改ItemDelegate的背景和文本颜色
我启用了材质设计(黑色主题) 一些教程告诉我使用background属性来设置我自己的带有自定义颜色的矩形项。如以下截图所示: 但是使用这种技术,我不再有这些好的涟漪效应了。我想做的就是更改所有项目的背景和文本颜色 所以我试着在没有运气的情况下改变背景的属性。在启动时,调试输出告诉我背景中没有颜色属性 所以我想出了一个使用绑定的“黑客”方法。。。现在属性存在了 这是实现我目标的最好方法吗?点击时会出现连锁反应,但我对此感觉不太好。我不明白为什么在使用绑定时属性存在,为什么在使用普通数据绑定时属性不存在Qt 更改ItemDelegate的背景和文本颜色,qt,qml,qtquick2,qtquickcontrols2,Qt,Qml,Qtquick2,Qtquickcontrols2,我启用了材质设计(黑色主题) 一些教程告诉我使用background属性来设置我自己的带有自定义颜色的矩形项。如以下截图所示: 但是使用这种技术,我不再有这些好的涟漪效应了。我想做的就是更改所有项目的背景和文本颜色 所以我试着在没有运气的情况下改变背景的属性。在启动时,调试输出告诉我背景中没有颜色属性 所以我想出了一个使用绑定的“黑客”方法。。。现在属性存在了 这是实现我目标的最好方法吗?点击时会出现连锁反应,但我对此感觉不太好。我不明白为什么在使用绑定时属性存在,为什么在使用普通数据绑定时属
ItemDelegate {
width: ListView.view.width
height: contentItem.implicitHeight + 10
topPadding: 5
bottomPadding: 5
highlighted: ListView.view.currentIndex === model.index
//background.color: highlighted ? "#81A3CF" : "#B3B2B2"
Binding {
target: background
property: "color"
value: highlighted ? "#81A3CF" : "#B3B2B2"
}
text: model.index + (highlighted ? " [highlighted]" : "")
//contentItem.color: "black"
Binding {
target: contentItem
property: "color"
value: "black"
}
onClicked: {
if(ListView.view.currentIndex === model.index)
ListView.view.currentIndex = -1;
else
ListView.view.currentIndex = model.index
}
}
原因很简单:
背景
被声明为项
,并且项
没有颜色
,因此在为其分配具有颜色
的具体项之前,您无法对其进行更改。因此,当您执行QML
-文件时,矩形
在创建所有内容之前不可用。此时,绑定将设置颜色
如果您不需要将其绑定到任何内容,另一种解决方案是使用:
Component.onCompleted: background.color = 'green'
否则,我认为绑定
-技巧很好(但这是观点!)我不确定您为什么要更改项目代理的背景色。在ListView中以视觉方式高亮显示选定项的通常方法是创建一个组件(通常使用矩形)并将其指定给ListView的highlight属性,然后将ListView的HighlightFollowCurrentItem设置为true。当currentIndex更改时,ListView将根据需要隐藏和显示高亮显示组件,如果需要,您可以指定各种过渡效果。Ah ok,因此我将保留我的背景绑定,因为它取决于高亮显示。我很难过,我自己实现了这些基本的东西,比如突出显示的意思和onClicked事件。我肯定认为这些东西应该留在图书馆里。如果我的物品也有背景色呢?高光矩形不会隐藏在项目下面吗?是的,我相信会。您所有的物品背景颜色相同还是不同?我一直使用一个与ListView大小相同的矩形作为ListView的子对象来提供列表的背景,在这种情况下,高亮显示的矩形显示在背景上方。但是如果您需要不同颜色的行,这将不起作用。