qt - QML ListView 隐藏委托(delegate)项

标签 qt listview qml qtquick2

有没有办法隐藏ListView中的某些项目?

import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2

ApplicationWindow {
    title: qsTr("Hello World")
    width: 640
    height: 480
    visible: true



    ListView {
        anchors.fill: parent

        model: ListModel {
            ListElement { color: "red"; visible: true}
            ListElement { color: "green"; visible: false}
            ListElement { color: "blue"; visible: true}
        }

        delegate: Rectangle {
            width: parent.width
            height: model.visible ? 30 : 0
            color: model.color
            visible: model.visible
            enabled: model.visible
        }
    }
}

如果只有 ListView 可以忽略不可见的 Itemheight,上面的解决方案会很好。

手动将height设置为0对性能不利,因此我需要更好的解决方案。你能帮我吗?

最佳答案

希望这能解决问题。对于像我这样的初学者来说,解决这个问题有助于进一步了解 qml。

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Window 2.0

ApplicationWindow {
    width: 640
    height: 480
    visible: true

ListView {
    id: displayListView
    anchors.fill: parent
    model: displayDelegateModel
}

ListModel {
    id: myModel
    ListElement { colo: "orange"; visible: true}
    ListElement { colo: "red"; visible: false}
    ListElement { colo: "white"; visible: true}
    ListElement { colo: "black"; visible: false}
    ListElement { colo: "green"; visible: true}
    ListElement { colo: "yellow"; visible: false}
}

VisualDataModel {
    id: displayDelegateModel

    delegate:  Rectangle {
        width: parent.width
        height: 30
        color: colo

        Text {
            text: colo
            anchors.centerIn: parent
            font.bold: true
            font.pixelSize: 20
        }
    }

    model: myModel

    groups: [
        VisualDataGroup {
            includeByDefault: false
            name: "visible"
        }
    ]

    filterOnGroup: "visible"

    Component.onCompleted: {
        var rowCount = myModel.count;
        items.remove(0,rowCount);
        for( var i = 0;i < rowCount;i++ ) {
            var entry = myModel.get(i);
            if(entry.visible == true) {
                items.insert(entry, "visible");
            }
        }
    }
}
}

关于qt - QML ListView 隐藏委托(delegate)项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32454280/

相关文章:

c++ - 编译 C 代码,看不到 #define 常量

c# - 如何在 Winforms ListView 中本地化/重命名 "Default"(无组) header ?

c++ - 如何通过 Qt 5.6 将 QML 应用程序窗口设置为透明?

c++ - 当 C++ 中的值发生变化时如何触发动画 qml?

c++ - 如何停止 QGridLayout 元素的扩展

c++ - Qt - 序列化 "double"时出现问题

c++ - 为QScrollArea预留空间

listview - 搜索栏获取文本但不过滤列表

带有 ListView 的 Android 小部件无法正确加载项目

android - 当设备的(android)键盘处于 Activity 状态时移动弹出窗口