Qt qml gridview:在末尾添加特殊项

Qt qml gridview:在末尾添加特殊项,qt,qml,qt5,Qt,Qml,Qt5,我想让QMLGridView在它的末尾有一个特殊的元素来添加新项目。因此,当网格回流时,末端的特殊元素与正常元素完全相同。我用一个流对它进行编码,在一个中继器内,在它之后,是一个特殊的元素,它工作得很好,但是我不能用流来获取滚动条,所以我移动到了GridView 我尝试了GridView的footer属性,但页脚显示在网格下,而我希望它位于网格的最后一行以及其他项目上 我想说清楚的是: [item1] [item2] [item3] [item4] [ ADD ] 此外,特殊元素必须具有不同的

我想让QML
GridView
在它的末尾有一个特殊的元素来添加新项目。因此,当网格回流时,末端的特殊元素与正常元素完全相同。我用一个
对它进行编码,在一个中继器内,在它之后,是一个特殊的元素,它工作得很好,但是我不能用流来获取滚动条,所以我移动到了GridView

我尝试了GridView的
footer
属性,但页脚显示在网格下,而我希望它位于网格的最后一行以及其他项目上

我想说清楚的是:

[item1] [item2] [item3]
[item4] [ ADD ]
此外,特殊元素必须具有不同的显示方式,并在单击时显示不同的操作

<>我希望C++方面不要意识到这种特殊行为。如果我必须在模型的末尾添加一个项目,我希望它在QML中添加它,这样我就不会玷污C++的实现细节。 我试过这个:

model: projects.push({name: '+'})

还有各种类型的
append
,但都不起作用。

我按照BaCaRoZzo的建议,设法让滚动条基于
流运行

然而,这是一个有点复杂的方案,我在标准输出上得到了QML警告

我是这样做的:

ScrollView {
    anchors.fill: parent
    Flickable {
        contentWidth: parent.width
        contentHeight: flow.implicitHeight
        Flow {
            id: flow
            anchors.fill: parent
            ...
        }
    }
}
如果我简单地将
放在
滚动视图
中,那么流中只有一列

据我所知,这是可行的,但是我在标准输出上得到了以下警告:

QML Flickable: Binding loop detected for property "contentWidth"
我希望有一个更简单的解决方案,但这就是我现在拥有的


编辑:好的,我去掉了警告。我只是在
Flickable
中设置了
width:parent.width
而不是
contentWidth
,它很好,运行良好,没有警告。我想我会坚持下去,除非有人提出更好的解决方案。

很高兴看到你解决了这个问题。 在测试代码之后,我认为您可以以更简单的方式获得相同的结果

如果将
绑定到包含
滚动视图
,则
可以水平增长,并根据需要获得垂直滚动条。工作守则:

import QtQuick 2.3
import QtQuick.Window 2.0
import QtQuick.Controls 1.2
// import QtQuick.Controls 1.3      // <--- requires Qt >= 5.4

Window {
    id: container
    width: 300
    height: 150
    visible: true

    ScrollView {
        anchors.fill: parent
        //horizontalScrollBarPolicy:  Qt.ScrollBarAlwaysOff  // <--- requires .Controls 1.3

        Flow {
            width: container.width       // width of ScrollView parent
            spacing: 10
            Text { text: "Text"; font.pixelSize: 40 }
            Text { text: "items"; font.pixelSize: 40 }
            Text { text: "flowing"; font.pixelSize: 40 }
            Text { text: "inside"; font.pixelSize: 40 }
            Text { text: "a"; font.pixelSize: 40 }
            Text { text: "Flow"; font.pixelSize: 40 }
            Text { text: "item"; font.pixelSize: 40 }
            Text { text: "yeah"; font.pixelSize: 40 }
            Text { text: "alright"; font.pixelSize: 40 }
            Text { text: "cool"; font.pixelSize: 40 }
            Text { text: "almost"; font.pixelSize: 40 }
            Text { text: "not"; font.pixelSize: 40 }
            Text { text: "epic"; font.pixelSize: 40 }
        }
    }
}

“但我无法获得带有流的滚动条”-->利用
ScrollView
Flickable
作为
流的容器应该提供滚动条。这不是一个可行的选择吗?我认为
ScrollView
只适用于
Flickable
,据我所知,它只是
GridView
ListView
?我现在开始更深入地研究它。以前失败。当我在add
ScrollView
中添加
Flow
时得到的第一个效果是
Flow
仅垂直流动。我记得以前我在做了一些调整后,设法让它水平流动。但是不要像没有
滚动视图时那样在二维中流动。是的,你不应该在没有固定大小的容器中使用
锚。fill:parent
,而应该尝试适合其内容。
import QtQuick 2.3
import QtQuick.Window 2.0
import QtQuick.Controls 1.2

Window {
    id: container
    width: 300
    height: 150
    visible: true

    Flickable {
        id: flick
        anchors.fill: parent
        contentHeight: flow.height    // grows according to the size of the Flow

        Flow {
            id: flow
            width: container.width
            spacing: 10
            Text { text: "Text"; font.pixelSize: 40 }
            Text { text: "items"; font.pixelSize: 40 }
            Text { text: "flowing"; font.pixelSize: 40 }
            Text { text: "inside"; font.pixelSize: 40 }
            Text { text: "a"; font.pixelSize: 40 }
            Text { text: "Flow"; font.pixelSize: 40 }
            Text { text: "item"; font.pixelSize: 40 }
            Text { text: "yeah"; font.pixelSize: 40 }
            Text { text: "alright"; font.pixelSize: 40 }
            Text { text: "cool"; font.pixelSize: 40 }
            Text { text: "almost"; font.pixelSize: 40 }
            Text { text: "not"; font.pixelSize: 40 }
            Text { text: "epic"; font.pixelSize: 40 }
        }
    }

    ScrollBar {                 // one of the scrollbars from the linked question
        flickable: flick
    }
}