c++ - 垂直 ListView 内的水平 ListView 模型

标签 c++ listview model qml qt5

我想将水平 ListView 作为垂直 ListView 的委托(delegate)。是否可以从 C++ 将不同的模型附加到水平 ListView ?

 ListView {
            id: eventList
            model: N (N tells how many horizontal lists are there)
            delegate:
                ListView {
                id: horizontall
                model: ?? // How to attach different model from C++ to each horizontal list
                orientation: ListView.Horizontal

在 C++ 部分,我实现了 N 个从 QAbstractlistmodel 派生的 QList 列表

最佳答案

是的,这是可能的。不可能制作一个包含另一个 ListModelListModel。至少在 QML 中是不可能的。

这里是如何制作它的快速而肮脏的例子。它能解决您的问题吗?

import QtQuick 2.4
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.4
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480

    ListModel {
        id: listModel
        ListElement {slmIndex: 0}
        ListElement {slmIndex: 1}
        ListElement {slmIndex: 2}
        ListElement {slmIndex: 3}
        ListElement {slmIndex: 4}
        ListElement {slmIndex: 5}
    }

    ListModel {
        id: model1
        ListElement { name: "1" }
    }
    ListModel {
        id: model2
        ListElement { name: "1" }
        ListElement { name: "2" }
    }
    ListModel {
        id: model3
        ListElement { name: "1" }
        ListElement { name: "2" }
        ListElement { name: "3" }
    }
    ListModel {
        id: model4
        ListElement { name: "1" }
        ListElement { name: "2" }
        ListElement { name: "3" }
        ListElement { name: "4" }
    }
    ListModel {
        id: model5
        ListElement { name: "1" }
        ListElement { name: "2" }
        ListElement { name: "3" }
        ListElement { name: "4" }
        ListElement { name: "5" }
    }
    ListModel {
        id: model6
        ListElement { name: "1" }
        ListElement { name: "2" }
        ListElement { name: "3" }
        ListElement { name: "4" }
        ListElement { name: "5" }
        ListElement { name: "6" }
    }
    property var secondLayerModels: [
        model1, model2, model3, model4, model5, model6
    ]

    ListView {
        anchors.centerIn: parent
        width: 200
        height: 200
        clip: true
        model: listModel
        orientation: ListView.Vertical
        delegate: ListView {
            width: 200
            height: 50
            model: secondLayerModels[slmIndex]
            orientation: ListView.Horizontal
            delegate: Rectangle {
                width: 50
                height: 50
                border.color: "black"
                Text {
                    anchors.fill: parent
                    verticalAlignment: Text.AlignVCenter
                    horizontalAlignment: Text.AlignHCenter
                    text: name
                }
            }
        }
    }
}

我不确定这个答案是否完全涵盖了这个问题。它不包括如何创建将公开另一个模型的 C++ 模型。

关于c++ - 垂直 ListView 内的水平 ListView 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37564520/

相关文章:

android - 如何以编程方式更改 Android ListView 的布局边距

css - 使用 CellFactory 时的 Javafx ListView 选择栏文本颜色

c++ - 在运行时检查 Windows 是否为 64 位的正确方法? (C++)

c++ - push_back() 和 resize(size()+1) 有区别吗

c++ - OpenCV 自适应阈值处理 HSV 图像

ruby-on-rails - Rails : change column type, 但保留数据

c++ - setData() 和 insert Rows() Qt 模型 View

c++ - 忙于轮询 std::atomic - msvc 优化了循环 - 为什么以及如何防止?

java - 尝试在 ListView 中更新从 SQLite 检索到的值时应用程序崩溃

javascript - 获取传入的 backbone.js 模型实例的模型类型