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

news2024/12/24 22:16:53

一、前言

最近才学到这里,感觉基础的 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有兴趣,不妨再关注一下我,嘿嘿 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1498577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录训练营第39天 | LeetCode 62.不同路径、​​​​​​LeetCode 63. 不同路径 II

LeetCode 62.不同路径 文章讲解:代码随想录(programmercarl.com) 视频讲解:动态规划中如何初始化很重要!| LeetCode:62.不同路径_哔哩哔哩_bilibili 思路 代码如下: ​​​​​​LeetCode 63. 不同路径 II 文章讲解…

Linux服务器安装nvm

1、 首先查看服务器有没有安装git git --version 2、如果没有安装:在Linux上是有yum安装Git,非常简单,只需要一行命令 yum -y install git 3、git安装完成后,使用以下其中一个命安装NVM # 能访问github的话,使用这…

CubeMX使用教程(3)——GPIO

在第二章我们完成了点灯仪式,这次我准备尝试把按键和灯结合起来,做一次GPIO的综合测试 实验任务为:按下按键1(B1),第1个灯(LD1)亮; 按下按键2(B2)…

使用Matlab计算IGRAv2探空站的Tm和PWV

1. 探空站IGRAv2数据 探空站的Tm常作为真值,去检验Tm线性公式或者ERA5 Tm等的精度 。 探空站PWV常作为真值,去检验GNSS PWV等的精度 2. Tm 的计算方法 Tm 的计算方法有两种在前面的文章有讲,这里用 使用水汽压和温度计算Tm。 ei和 Ti 表示…

python-分享篇-股票收盘走势分析(折线图)

文章目录 代码效果 代码 import pandas as pd import numpy as np import matplotlib.pyplot as plt aa r../data/000001.xlsx #设置数据显示的列数和宽度 pd.set_option(display.max_columns,500) pd.set_option(display.width,1000) #解决数据输出时列名不对齐的问题 pd.set…

谷粒学院--在线教育实战项目【一】

谷粒学院--在线教育实战项目【一】 一、项目概述1.1.项目来源1.2.功能简介1.3.技术架构 二、Mybatis-Plus概述2.1.简介2.2.特性 三、Mybatis-Plus入门3.1.创建数据库3.2.创建 User 表3.3.初始化一个SpringBoot工程3.4.在Pom文件中引入SpringBoot和Mybatis-Plus相关依赖3.5.第一…

vcruntime140.dll丢失的修复办法详细介绍以及详细步骤

当电脑丢失vcruntime140.dll文件时,电脑会出现关于vcruntime140.dll丢失的错误提示,vcruntime140.dll文件包含许多重要的函数和资源,若缺少或丢失该文件,可能会导致电脑出现异常状况。今天就来和大家说说如果电脑出现关于vcruntim…

经验分享:水牛社怎么做?

本人也就是通过他慢慢学习成长起来的。还是一个网友推荐的,现在他对我来说算是大佬了,已经单飞了,好久都没有联系了,呵呵,真是人往高处走,水往低处流啊。 做网赚会经常和一些网络小白聊天,聊着…

Android视角看鸿蒙第三课(module.json中的各字段含义之nametype)

Android视角看鸿蒙第三课(module.json中的各字段含义) 前言 上篇文章我们试图找到鸿蒙app的程序入口,确定了在鸿蒙工程中,由AppScope下的app.json5负责应用程序的图标及名称,由entry->src->main-module.json5负责桌面图标及名称的展示。 AppScope下的app.js…

IAR全面支持小华全系芯片,强化工控及汽车MCU生态圈

IAR Embedded Workbench for Arm已全面支持小华半导体系列芯片,加速高端工控MCU和车用MCU应用的安全开发 嵌入式开发软件和服务的全球领导者IAR与小华半导体有限公司(以下简称“小华半导体”)联合宣布,IAR Embedded Workbench fo…

HTML超详细简介

HTML是什么 超文本标记语言(HyperText Mark-up Language )用来设计网页的标记语言用该语言编写的文件,以 .html或 .htm为后缀由浏览器解释执行不区分大小写,建议小写 HTML标签 HTML用于描述功能的符号成为“标签”标签都封装在…

如何用ChatGPT+GEE+ENVI+Python进行高光谱,多光谱成像遥感数据处理?

原文链接:如何用ChatGPTGEEENVIPython进行高光谱,多光谱成像遥感数据处理? 第一:遥感科学 从摄影侦察到卫星图像 遥感的基本原理 遥感的典型应用 第二:ChatGPT ChatGPT可以做什么? ChatGPT演示使用 …

专访|云安全攻防:从理论到应用的全面探索

2023年11月,美国核研究实验室(INL)遭遇数据泄露。同年10月,索尼的员工数据在MOVEit攻击事件中被泄露。2024年2月,某知名制造商因云存储服务器的配置错误导致了敏感数据泄露。 这些事件表示企业必须重视云安全建设&…

校园小情书微信小程序,社区小程序前后端开源,校园表白墙交友小程序

功能 表白墙卖舍友步数旅行步数排行榜情侣脸漫画脸个人主页私信站内消息今日话题评论点赞收藏 效果图

[OpenCv]频域处理

目录 前言 一、频域变换 1.傅里叶变换 2.代码实现 二、频域中图像处理 1.理解数字图片的频谱 2.频域图像处理步骤 3.使用低通滤波器实现图像平滑 4.使用高通滤波器实现图像锐化 三、总结 前言 数字图像处理的方法有两大类:一种是空间域处理法,…

Pytorch学习 day06(torchvision中的datasets、dataloader)

torchvision的datasets 使用torchvision提供的数据集API,比较方便,如果在pycharm中下载很慢,可以URL链接到迅雷中进行下载(有些URL链接在源码里)代码如下: import torchvision # 导入 torchvision 库 # …

Mac版2024 CleanMyMac X 4.14.6 核心功能详解以及永久下载和激活入口

CleanMyMac 是 macOS 上久负盛名的系统清理工具,2018 年,里程碑式版本 CleanMyMac X 正式发布。不仅仅是命名上的变化,焕然一新的 UI、流畅的动画也让它显得更加精致。新增的系统优化、软件更新等功能,使得在日常使用 macOS 时有了…

C# Mel-Spectrogram 梅尔频谱

目录 介绍 Main features Philosophy of NWaves 效果 项目 代码 下载 C# Mel-Spectrogram 梅尔频谱 介绍 利用NWaves实现Mel-Spectrogram 梅尔频谱 NWaves github 地址:https://github.com/ar1st0crat/NWaves NWaves is a .NET DSP library with a lot …

Springboot 的几种配置文件形式

方式一:多个yml文件 步骤1:创建多个配置文件 application.yml #主配置文件 application-dev.yml #开发环境的配置 application-prod.yml #生产环境的配置 application-test.yml #测试环境的配置步骤2:applicaiton.yml中指定配置 在a…

H3C BGP 基本配置实验

H3C BGP 基本配置实验 实验拓扑 ​​ 实验需求 按照图示配置 IP 地址,R1 和 R5 上使用环回口模拟业务网段,R2,R3,R4 的环回口用于配置 Router-id 和建立 IBGP 邻居AS 200 运行 OSPF 实现内部网络互通R1,R2&#xf…