listview - 反转ListView而不从底部填充ListView

标签 listview qml qt-quick

我希望 ListView 反转其项目的顺序,以便最新的项目位于顶部。 我尝试使用 verticalLayoutDirection: ListView.BottomToTop 来实现这一点,但它使 ListView 从底部填满(我猜这是预料之中的)。

我用红色标记了所述 ListView 的实际边界。 enter image description here

如何反转 ListView 的项目顺序并仍然从上到下填充?越干净越好。

根据要求,更多信息:

ListView
{
    id: theList

    anchors
    {
        left: parent.left
        top: theAboveList.bottom
        right: parent.right
        bottom: parent.bottom
    }

    model: theModel
    delegate: theDelegate {}
    verticalLayoutDirection: ListView.BottomToTop
    clip: true
}

我需要将其反转的原因是,委托(delegate)实例知道它们何时位于最底部(我可以在委托(delegate)中执行 index === 0),以设置某种状态。

最佳答案

如果我理解正确的话,我想到的第一个想法是使用模型并操作来自 C++ Qt side 的模型.但是这个任务需要更多的耐心并且会产生一点开销。

另一种方法是将您的模型作为典型的 JavaScript 列表来操作——填充它,然后手动反转。

代码很简单:

function swap(a, b) {
    if (a < b) {
        move(a, b, 1)
        move (b-1, a, 1)
    } else if (a > b) {
        move(b, a, 1)
        move (a-1, b, 1)
    }
}

function reverse() {
    for (var i = 0; i < Math.floor(count/2); ++i) {
        swap(i, count-i-1)
    }
}

在这里您可以找到我写的 AdvancedListModel 的源代码 -- https://github.com/troyane/StackOverflow-pro/tree/master/AdvModel_qml .

关于listview - 反转ListView而不从底部填充ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28496502/

相关文章:

c# - ListView 不刷新其项目

android - 我们应该使用 RecyclerView 来代替 ListView 吗?

qt - 在 Qt5.7 QtQuick2 应用程序模板中设置 Qml 上下文属性

QML:通过拖动移动无框窗口

qt - 动态创建qml窗口的正确方法

android - 如何将 ListView 扩展为 View

database - Listview - 用数据库中的相应项目填充第二列

c++ - QML Repeater 亲子关系

c++ - 如何在 WebView(QtQuick 2.0 和 QtWebKit 3)中使用 statusChanged?

qt - 在 QML 中创建自定义 C++ 对象并将其存储在 C++ 模型中