我正在编写一个加载和显示图像的QML应用程序,我有一个显示用户当前正在查看的图像的中央框架,以及一个允许用户选择图像的侧边栏。我遇到的问题是获取侧栏中当前所选项目的信息(ListView
)。
此外,我无法访问sourceChanged
中delegate
的{{1}}信号,因此无法在用户向下滚动然后返回的情况下更新列表中的图像强迫他们重装。是否有任何简单的方法来访问这些属性,即使它们嵌套在ListView
?
以下是我ListView
的代码。问题是,我希望能够从ListView
外部访问Image
以发送ListView
信号,但我不确定您将如何访问特定项目在列表中。
sourceChanged
答案 0 :(得分:0)
好的,所以我解决了这个问题,虽然我可能没有以最好的方式做到这一点。
我的解决方案是在窗口中创建一个信号newFrame
,每次加载新帧时都会发送该信号。然后,每次发送信号时,我都会在Connections
中使用Image
来更新source
。
signal newFrame()
//Stores all the fileURLs
function loadImages()
{
for(var i = 0; i < fileDialog.fileUrls.length; i++)
{
var exists = false
for(var j = 0; j < frames.length; j++)
{
if(frames[j] === fileDialog.fileUrls[i])
{
exists = true
}
}
if(exists == false)
{
if(frames == [])
{
frames = fileDialog.fileUrls[i]
}
else
{
frames.push(fileDialog.fileUrls[i])
}
frame.sourceChanged(frame.source)
newFrame()
}
}
}
Component
{
id: frameDelegate
Rectangle
{
id: wrapper
anchors {horizontalCenter: parent.horizontalCenter}
height: 300
width: 300
//If there is an image in that space and if it's selected, highlight it
color: frames[number] === undefined ? "white" : wrapper.ListView.view.currentIndex === index ? "yellow" : "white"
Image
{
id: image
height: 280
width: 280
anchors.centerIn: parent
fillMode: Image.PreserveAspectFit
source: "image://images/" + frames[number]
Connections {
target: window
onNewFrame: {
image.source = "image://images/" + frames[number]
}
}
}
MouseArea
{
height: 280
width: 280
anchors.fill: image
hoverEnabled: true
onClicked: {frames[index] === undefined ? console.log(""): wrapper.ListView.view.currentIndex = index; frame.sourceChanged(frame.source)}
}
}
}