You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在QML ListView中实现多条件搜索筛选?

QML ListView多条件搜索实现方案

只需修改FilterDelegateModel中的filter判断逻辑,将单字段匹配改为state或country任一字段匹配,就能解决筛选失效问题并满足需求。

修改核心代码

重点调整filter函数的匹配规则,同时检查state和country字段:

FilterDelegateModel {
    id: filterDelegateModel
    model: states
    // 关键修改:任一字段匹配即保留条目
    filter: search ? model => 
        model.state.toLowerCase().indexOf(search) !== -1 
        || model.country.toLowerCase().indexOf(search) !== -1 
        : null
    property string search: searchTextEdit.text.toLowerCase()
    onSearchChanged: Qt.callLater(update)
    // delegate部分保持原有逻辑...
}

完整可运行代码

Page 
{
    ColumnLayout {
        anchors.fill: parent
        anchors.margins: 10
        Label { text: qsTr("Search") }

        Frame {
            Layout.fillWidth: true
            TextEdit {
                id: searchTextEdit
                width: parent.width
            }
        }

        Label { text: qsTr("States (count:%1)").arg(filterDelegateModel.count) }

        ListView {
            Layout.fillWidth: true
            Layout.fillHeight: true
            clip: true
            model: FilterDelegateModel {
                id: filterDelegateModel
                model: states
                filter: search ? model => 
                    model.state.toLowerCase().indexOf(search) !== -1 
                    || model.country.toLowerCase().indexOf(search) !== -1 
                    : null
                property string search: searchTextEdit.text.toLowerCase()
                onSearchChanged: Qt.callLater(update)
                delegate: Frame {
                    id: frame
                    property int visibleIndex: DelegateModel.visibleIndex
                    width: ListView.view.width
                    background: Rectangle {
                        color: visibleIndex & 1 ? "#e0e0e0" : "#d0d0d0"
                        border.color: "#c0c0c0"
                    }
                    RowLayout {
                        width: parent.width
                        Text {
                            text: (visibleIndex + 1)
                            color: "grey"
                        }
                        Text {
                            Layout.fillWidth: true
                            text: model.state
                        }
                        // 可选:添加country字段显示
                        Text {
                            text: model.country
                            color: "#2196F3"
                            Layout.alignment: Qt.AlignRight
                        }
                    }
                }
            }
        }
    }

    ListModel {
        id: states
        ListElement { state:"Durban"; country: "RSA" }
        ListElement { state:"New York"; country: "USA" }
        ListElement { state:"Toronto"; country: "Canada" }
        ListElement { state:"Mbabane"; country: "Swaziland" }
        ListElement { state:"Harare"; country: "Zimbabwe" }
    }
}

功能说明

  • 搜索不区分大小写:输入文本自动转为小写,与字段内容的小写形式匹配
  • 多字段匹配:只要state或country包含搜索文本,条目就会被保留
  • 空搜索显示全部:搜索框清空时,自动恢复显示所有列表项

内容的提问来源于stack exchange,提问作者Clive N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 00:45:22