如何在QML中从gridview引入列表项?

时间:2016-10-24 10:34:53

标签: qt qml

我正在创建一个媒体播放器系统,其中使用网格视图列出一些歌曲。在我们的应用程序中,我们可以从列表中拖动一首歌曲并将其放在指定区域。这些所有功能都已实施。但问题是在拖动时,项目被拖到网格视图中的其他项目后面。  (即,如果列出3首歌曲,则第一首歌曲落后于其他两首歌曲。第二首歌曲落后于第三首歌曲,但在第一首歌曲之前)。

尝试将网格项目拖放到前面时。 对此有什么解决方案吗?

2 个答案:

答案 0 :(得分:1)

您可以创建一个专用的拖动图标项,而不是拖动原始对象,并将其设置为网格视图顶部的不可见项,这样它就会位于网格视图顶部的每个元素之上。网格。拖动开始时创建项目,拖动结束时将其销毁。

答案 1 :(得分:0)

如@derM所述,您可以使用GridItem的z索引。以下示例代码可以帮助您:

注意:与您的问题有关的部分是GridItem中onPressed事件MouseArea内的代码。

Rectangle{
    width: 1280
    height: 800

    GridView{
        Rectangle{ anchors.fill: parent; color: 'blue'; opacity: 0.2; }
        id: musicBox
        width: 500; height: 500
        model: 10
        anchors.centerIn: parent

        delegate: Rectangle{
            id: songItem
            border{ width: 2; color: 'blue'}
            width: 100; height: 100
            color: (musicBox.currentIndex == index) ? 'yellow' : 'red'

            Text{
                anchors.centerIn: parent
                text: index
                font.pixelSize: 20
            }

            MouseArea{
                anchors.fill: songItem
                drag{
                    minimumX: 0
                    minimumY: 0
                    maximumX: musicBox.width
                    maximumY: musicBox.height
                    axis: Drag.XandYAxis
                    target: songItem
                }
                onPressed:{
                    for(var i = 0; i < musicBox.count; i++){ musicBox.currentIndex = i; musicBox.currentItem.z = i; }
                    musicBox.currentIndex = index
                    musicBox.currentItem.z = musicBox.count
                }
            }
        }
    }
}