我想让QML GridView
在其末尾添加一个特殊元素来添加新项目。因此,当网格回流时,末端的特殊元素与正常元素完全相同。我用Flow
进行了编码,在Repeater内部,在它之后,这个特殊的元素和它工作得很好,但是我不能使用Flow获得滚动条,所以我转移到GridView。
我尝试了GridView的footer
属性,但页脚显示在网格下,而我希望它在网格的最后一行除了其他项目之外。
这里说清楚我想要的是什么:
[item1] [item2] [item3]
[item4] [ ADD ]
此外,特殊元素在点击时必须具有不同的显示和不同的操作。
我希望C ++方面不要意识到这种特殊行为。如果我必须在模型的末尾添加一个项目,我希望它在QML中添加它,这样我就不会用实现细节来玷污C ++。
我试过了:
model: projects.push({name: '+'})
以及各种类型的append
,但这些都不起作用。
答案 0 :(得分:1)
很高兴看到你解决了这个问题。 在测试代码之后,我认为您可以更轻松地实现相同的结果。
如果您将Flow
绑定到包含Item
的{{1}},ScrollView
可以水平增长,您可以根据需要获得垂直滚动条。工作代码:
Flow
这里,Qt< 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
,而且没关系,行为也很好,没有任何警告。我想我会坚持下去,除非有人想出一个更好的解决方案。