Qml 实现星级评分组件 已发布

news/2024/9/18 13:18:29/文章来源:https://www.cnblogs.com/mengps/p/18415411

【写在前面】

在现代应用程序中,星级评分是一个常见的用户界面元素,它允许用户对产品、服务或内容进行评价。

想必大家在用各种带有评分的软件中看到过这个组件:

image

本文将指导你如何使用 Qml 创建一个简单而美观的星级评分组件,并且支持高度自定义。


【正文开始】

先来看看效果图:

image

现在开始讲解思路:

首先,我们需要考虑半星的情况,因此可以分为三个部分:

image

1、红色部分:满填充星星【fillDelegate】。

2、绿色部分:半填充星星【halfDelegate】。

3、蓝色部分:无填充星星【emptyDelegate】。

这三部分都是通过代理实现的,因此如果需要自定义,则必须提供这三个组件:

    property Component fillDelegate: Component {Text {text: fillIconcolor: root.iconColorfont.family: fontAwesome.namefont.pixelSize: iconFontSize}}property Component emptyDelegate: Component {Text {text: emptyIconcolor: root.iconColorfont.family: fontAwesome.namefont.pixelSize: iconFontSize}}property Component halfDelegate: Component {Text {text: halfIconcolor: root.iconColorfont.family: fontAwesome.namefont.pixelSize: iconFontSize}}

接下来,我们需要计算每个部分的数量,其中半星必然只有一颗( 如果有 ):

    property int fillCount: Math.floor(root.value)property int emptyStartIndex: Math.round(root.value)property bool hasHalf: root.value - fillCount > 0

然后用 Repeater + Loader 载入即可:

    Repeater {id: repeatermodel: root.countdelegate: MouseArea {id: rootItemwidth: root.iconSizeheight: root.iconSizehoverEnabled: trueonEntered: hovered = true;onExited: hovered = false;onClicked: {root.isDone = !root.isDone;if (root.isDone) {__private.doneValue = root.value;root.done(__private.doneValue);}}onPositionChanged: function(mouse) {if (root.allowHalf) {if (mouse.x > (width * 0.5)) {root.value = index + 1;} else {root.value = index + 0.5;}} else {root.value = index + 1;}}property bool hovered: falseLoader {active: index < repeater.fillCountsourceComponent: fillDelegateproperty bool hovered: rootItem.hovered}Loader {active: repeater.hasHalf && index === (repeater.emptyStartIndex - 1)sourceComponent: halfDelegateproperty bool hovered: rootItem.hovered}Loader {active: index >= repeater.emptyStartIndexsourceComponent: emptyDelegateproperty bool hovered: rootItem.hovered}}property int fillCount: Math.floor(root.value)property int emptyStartIndex: Math.round(root.value)property bool hasHalf: root.value - fillCount > 0}

至此,核心部分讲解完了,其他部分直接看源码即可。


【结语】

最后:项目链接(多多star呀..⭐_⭐):

Github 地址:https://github.com/mengps/QmlControls/tree/master/Rate

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

帝国cms配置数据库是什么

帝国CMS配置数据库涉及到对系统数据库连接参数的设置。为了正确配置帝国CMS以连接到数据库,你需要编辑配置文件中的相应部分。对于帝国CMS 7.0及之后的版本,数据库配置文件位于: /e/config/config.php在这个文件中,你需要设置以下几项:数据库名 (DBHOST):这是你的MySQL数…

开发nodejs RESETful api 创建项目流程

开发nodejs RESETful api 创建项目流程 1. 安装 vm-windows、node.js 和 npm 安装 Node.js 时, 建议使用版本管理器,因为版本变更速度非常快。 你可能需要根据所使用的不同项目的需要在多个 Node.js 版本之间进行切换。 Node 版本管理器(通常称为 nvm)是安装多个版本的 Nod…

帝国cms用的什么数据库

帝国CMS(EmpireCMS,简称ECMS)使用的是MySQL数据库来存储其数据。MySQL是一个广泛使用的开源关系型数据库管理系统(RDBMS),因其高性能、稳定性和易用性而受到许多Web应用的青睐,包括内容管理系统(CMS)。 帝国CMS利用MySQL数据库来存储网站的各种数据,包括但不限于文章…

软件工程课程第二次个人作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253这个作业的目标 学习开发游戏学号 082200168项目名称:羊了个羊-动物版消除类小游戏 项目链接:https://github.com/luihing2004…

织梦dede如何去掉后台登陆界面广告

要去除DEDECMS(织梦CMS)后台登录界面的广告,可以通过以下步骤来实现: 步骤 1: 删除广告代码定位广告文件:广告通常位于/dede/templets/目录下的login.htm文件中。 另外,还有一个广告文件login_ad.htm,也需要处理。删除广告代码:打开login.htm文件,查找并删除以下代码:…

帝国cms后台出现“您还未登录”错误怎么办

当帝国CMS后台出现“您还未登录”的错误提示时,通常是因为用户的登录状态未能正确维持。这个问题可能由多种因素引起,以下是一些常见的解决方法: 1. 清除浏览器缓存和Cookies清除缓存:打开浏览器的设置或选项菜单,找到清除浏览数据或清除缓存的功能,选择清除所有缓存数据…

帝国cms自动刷新怎么设置

帝国CMS的自动刷新功能可以通过后台设置或使用插件来实现。下面是两种实现自动刷新的方法: 方法一:通过后台设置登录后台:登录帝国CMS的后台管理界面。进入系统设置:在后台管理界面中找到“系统设置”或类似的选项。找到缓存设置:在系统设置中,找到有关页面缓存的设置部分…

帝国CMS二次开发基本问题有哪些

帝国CMS的二次开发涉及到对现有系统的扩展和定制,以满足特定业务需求。在进行二次开发时,开发者可能会遇到一系列的问题。以下是一些常见的帝国CMS二次开发基本问题: 1. 导入语言包 在帝国CMS中,如果需要在扩展文件中导入语言包,可以使用以下方式:如果程序文件位于/e/ext…

帝国CMS提示“您来自的链接不存在”怎么解决?

当帝国CMS提示“您来自的链接不存在”时,这通常意味着系统无法找到或识别你尝试访问的链接。这种情况可能由多种原因造成,以下是一些常见的解决方法: 1. 检查链接地址确认链接地址:首先确认你尝试访问的链接地址是否正确,包括拼写错误或格式问题。 清除缓存:有时候浏览器…

dedecms怎么获取当前文档url地址

在DEDECMS中获取当前文档的URL地址,可以通过多种方法实现。以下是几种常用的方法: 方法一:使用全局函数 DEDECMS提供了一个全局函数GetCurUrl(),可以用来获取当前页面的URL地址。在模板文件中,可以通过{dede:geturl}标签来调用这个函数:{dede:geturl runphp=yes}@me = Ge…

帝国cms和织梦哪个好

帝国CMS和织梦CMS都是基于PHP语言的内容管理系统(CMS),各自具有一定的优势和劣势。选择哪一个更适合你,取决于你的具体需求、技术水平以及对未来的规划。下面是两者的比较,帮助你做出决策: 织梦CMS (DEDECMS) 优点用户友好度:织梦CMS以其简洁的后台界面和易于使用的特性…

Ubuntu 22.04.5 LTS 发布下载 - 现代化的企业与开源 Linux

Ubuntu 22.04.5 LTS 发布下载 - 现代化的企业与开源 LinuxUbuntu 22.04.5 LTS (Jammy Jellyfish) - 现代化的企业与开源 Linux Ubuntu 22.04.5 发布,配备 Linux 内核 6.8 请访问原文链接:https://sysin.org/blog/ubuntu-2204/,查看最新版。原创作品,转载请保留出处。 作者主…