分享几种简约大方的ListView外观设计(qml)

一、前言

最近才学到这里,感觉基础的 ListView 很丑,就现学现用弄个几个自认为还行的设计给大家献丑了。如果你觉得还不错,代码就在下面拿去直接用,顺便给我点个赞哈 ~ 感谢感谢 ~

二、正文

设计1

第一种就是正常的左侧边栏,特别之处就是高亮项用了4个小三角。这小三角并不是图片,而是高亮的圆角和矩形项重叠得到的,有点老古董游戏里的菜单项选择时的感觉。

代码是单独新建的一个qml文件里写的,如果写到主文件里会很长,建议分文件去写界面。

具体代码:

import QtQuick
import QtQuick.Controls

Rectangle{
    width: 100; height: parent.height
    color: 'grey'

    ListView{
        id: list
        width: 90; height: parent.height
        x: 10; y:10
        spacing: 10
        clip: true

        model: ['首页', '销售数据', '库存数据', '发货计划', '广告', '设置', '用户权限']
        delegate: Rectangle{
            width: 80; height: 30
            color: 'grey'
            radius: 10

            Text{
                id: itemText
                anchors.centerIn: parent
                color: 'white'
                text: modelData
            }

            MouseArea{
                anchors.fill: parent
                onClicked: {
                    list.currentIndex = index
                }
            }
        }

        highlight: Rectangle{
            color: "transparent"
            border.width: 2
            border.color: 'white'
        }

        highlightMoveDuration: 0
    }
}

设计2

第二种也是高亮和项的背景堆叠出来的小三角,这里换成了黄色。和上面不同地方是这个是一个横向的菜单栏。

做这个横向的菜单栏的原因是,我准备做一个小程序,但是功能不太多,我想着设计成横向的会更美观一些。

qml里的 ListView 是自带一点项之间切换的动画的,大家有兴趣的话复制下面的代码自己去试试就知道了,总之,还是挺不错的。

具体代码:

import QtQuick
import QtQuick.Controls

Rectangle{
    width: parent.width; height: 38
    color: 'black'

    ListView{
        id: list
        x: 10
        anchors.verticalCenter: parent.verticalCenter
        width: parent.width; height: 30
        model: ['主页', '工具箱', '店铺', '业绩报表', '广告', '库存', '财务报表', '产品表现', '设置']
        clip: true

        delegate: Rectangle{
            width: 60; height: 30
            color: 'black'
            radius: 10

            Text{
                text: modelData
                color: "white"
                anchors.centerIn: parent
            }

            MouseArea{
                anchors.fill: parent
                onClicked: {
                    list.currentIndex = index //可以实现高亮切换
                }
            }
        }
        spacing: 10
        highlight: Rectangle{
            color: "transparent"
            border.width: 3
            border.color: "yellow"
        }
        highlightMoveDuration: 0
        orientation: ListView.Horizontal //让 ListView 横向显示
    }
}

设计3

这个也比较简单,高亮用白色,字被点击后从灰色切换成黑色,和白色形成鲜明对比,看起来还是挺醒目的,也比较简约美观,但是总感觉不太满意,所以就有了下面的第4种设计。

设计3主要是增加了当前项的字体颜色切换,其它和上面的并无太大差异。重点代码是下面这句,ListView.isCurrentItem + 三目运算符。

color: reccc.ListView.isCurrentItem ? "black" : "grey"

具体代码:

import QtQuick
import QtQuick.Controls

Rectangle{
    id: rec
    width: parent.width; height: 38
    color: 'lightgrey'

    ListView{
        id: list
        x: 10
        anchors.verticalCenter: parent.verticalCenter
        width: parent.width; height: 30
        model: ['常用单位换算', '英文大小写转换', '文本处理工具']
        clip: true

        delegate: Rectangle{
            id: reccc
            width: 100; height: 30
            color: 'transparent'

            Text{
                id: modelDataText
                text: modelData
                color: reccc.ListView.isCurrentItem ? "black" : "grey"
                anchors.centerIn: parent
            }

            MouseArea{
                anchors.fill: parent
                onClicked: {
                    list.currentIndex = index //可以实现高亮切换
                }
            }
        }
        spacing: 10
        highlight: Rectangle{
            color: "white"
            width: 100; height: 30
            radius: 15
        }
        highlightMoveDuration: 200
        orientation: ListView.Horizontal //让 ListView 横向显示
    }
}

设计4

第4种就是下面这样的啦,已经是我目前最高水平发挥了,哇咔咔 ~

我把 ListView 没有锚定在 Rectangle 上,而是 y坐标往下偏移了14,再把高亮背景色设置成白色,这样看起来就好像是一个 Tab标签页,和下面的内容形成一个整体,我个人感觉还不赖。

在我这个程序投入使用之前,如果还没想到更好的设计的话,就暂时先用这个吧!

具体代码:

import QtQuick
import QtQuick.Controls

Rectangle{
    id: rec
    width: parent.width; height: 38
    color: '#002f36'

    ListView{
        id: list
        x: 10; y: rec.y +14
        width: parent.width; height: 30
        model: ['常用单位换算', '英文大小写转换', '文本批量处理', '文件管理器']
        clip: true

        delegate: Rectangle{
            id: reccc
            width: 100; height: 30
            color: 'transparent'

            Text{
                id: modelDataText
                text: modelData
                color: reccc.ListView.isCurrentItem ? "#002f36" : "#ffffff"
                anchors.centerIn: parent
            }

            MouseArea{
                anchors.fill: parent
                onClicked: {
                    list.currentIndex = index //可以实现高亮切换
                }
            }
        }
        spacing: 10
        highlight: Rectangle{
            color: "white"
            radius: 5
        }
        highlightMoveDuration: 200
        orientation: ListView.Horizontal //让 ListView 横向显示
    }
}

三、写在最后

都看到这里了,就顺手点个赞吧 ~

我后面会持续稳定分享qml方面的知识和小技巧,如果你也和我一样对qml有兴趣,不妨再关注一下我,嘿嘿 ~

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
QML中,ListView是一种非常常用的QML组件,用于以列表形式展示数据。ListView可以使用不同的数据模型来提供数据,从而实现灵活的数据展示和交互。 以下是几种常见的ListView数据模型: 1. ListModel模型:这是最常用的数据模型之一,它允许我们通过添加项目来动态修改和管理数据。可以通过在ListView外部创建一个ListModel对象,并将该对象作为ListView的model属性来实现。ListModel对象中的每个项目都可以通过属性定义。可以使用JavaScript的API来操作ListModel的项目,如添加、删除、移动等。 2. ArrayDataModel模型:这种数据模型适用于静态数据。在QML中,我们可以使用JavaScript数组来初始化数据,并将该数组作为ListView的model属性值。此模型基于JavaScript数组,并且不允许对数据进行修改。如果需要对数据进行更改,需要先将数组中的数据复制到一个新的数组,然后将新数组作为model。 3. XmlListModel模型:这个模型是XML数据源的绑定模型。它可以从远程或本地XML文件中提取数据,并在ListView中展示。可以在XmlListModel中指定XML文件的路径,然后使用XmlRole来定义需要展示的数据。XmlListModel可以通过一系列XPath表达式来过滤和排序数据。 4. SqlListModel模型:这个模型是用于绑定SQL数据库的数据模型。可以通过指定SQL查询语句来从数据库中获取数据,并在ListView中展示。可以使用roleNames属性来定义在ListView中展示哪些数据。SqlListModel还具有数据过滤和排序功能。 总的来说,QML中的ListView可以使用多种数据模型来展示不同类型的数据。无论是动态数据还是静态数据,XML数据源还是SQL数据库,都可以通过适当选择数据模型来满足个性化的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵呜角角

如果对你有所帮助,哪怕1毛钱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值