访问ListView的属性

时间:2015-07-22 10:04:44

标签: qt listview qml qtquick2

我正在编写一个加载和显示图像的QML应用程序,我有一个显示用户当前正在查看的图像的中央框架,以及一个允许用户选择图像的侧边栏。我遇到的问题是获取侧栏中当前所选项目的信息(ListView)。

此外,我无法访问sourceChangeddelegate的{​​{1}}信号,因此无法在用户向下滚动然后返回的情况下更新列表中的图像强迫他们重装。是否有任何简单的方法来访问这些属性,即使它们嵌套在ListView

以下是我ListView的代码。问题是,我希望能够从ListView外部访问Image以发送ListView信号,但我不确定您将如何访问特定项目在列表中。

sourceChanged

1 个答案:

答案 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)}
        }
    }
}