qml gridview:最后添加特殊项目

时间:2014-12-20 18:42:26

标签: qt qml qt5

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

我尝试了GridView的footer属性,但页脚显示在网格下,而我希望它在网格的最后一行除了其他项目之外。

这里说清楚我想要的是什么:

[item1] [item2] [item3]
[item4] [ ADD ]

此外,特殊元素在点击时必须具有不同的显示和不同的操作。

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

我试过了:

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

以及各种类型的append,但这些都不起作用。

2 个答案:

答案 0 :(得分:1)

很高兴看到你解决了这个问题。 在测试代​​码之后,我认为您可以更轻松地实现相同的结果。

如果您将Flow绑定到包含Item的{​​{1}},ScrollView可以水平增长,您可以根据需要获得垂直滚动条。工作代码:

Flow

这里,Qt&lt; 5.4,你得到了水平滚动条,因为垂直滚动条覆盖了内容空间的一部分。使用Qt 5.4中的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 } } } } (和相关的注释代码)解决了这个问题。


解决此问题的另一种方法是将controls 1.3与自定义滚动条一起使用(请参阅here)。在这种情况下,代码将是:

Flickable

答案 1 :(得分:0)

我设法根据BaCaRoZzo建议的Flow使滚动条工作。

然而,这是一个有点复杂的方案,我在stdout上收到了QML警告。

我是这样做的:

ScrollView {
    anchors.fill: parent
    Flickable {
        contentWidth: parent.width
        contentHeight: flow.implicitHeight
        Flow {
            id: flow
            anchors.fill: parent
            ...
        }
    }
}

如果我只是将Flow放在ScrollView中,我只会在流程中获得一列。

据我所知,这是有效的,但是我在stdout上收到了这个警告:

QML Flickable: Binding loop detected for property "contentWidth"

我希望有一个更简单的解决方案,但这就是我现在所拥有的......

编辑:好的我摆脱了警告。我只是在width: parent.width中设置了contentWidth而不是Flickable,而且没关系,行为也很好,没有任何警告。我想我会坚持下去,除非有人想出一个更好的解决方案。