QML自定义滑动条Slider的样式

news2025/1/7 7:25:24

代码展示

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.1

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

    Slider {
          id: control
          value: 0.5

          background: Rectangle {
              x: control.leftPadding
              y: control.topPadding + control.availableHeight / 2 - height / 2
              implicitWidth: 200
              implicitHeight: 4
              width: control.availableWidth
              height: implicitHeight
              radius: 2
              color: "#bdbebf"

              Rectangle {
                  width: control.visualPosition * parent.width
                  height: parent.height
                  color: "#1a95f3"
                  radius: 2
              }
          }

          handle: Rectangle {
              x: control.leftPadding + control.visualPosition * (control.availableWidth - width)
              y: control.topPadding + control.availableHeight / 2 - height / 2
              implicitWidth: 26
              implicitHeight: 26
              radius: 13
              color: control.pressed ? "#167dcb" : "#1a95f3"
              border.color: "#bdbebf"
          }
      }



}

运行效果展示

代码说明

这段QML代码定义了一个包含自定义滑动条(Slider)的窗口(Window)。下面是对关键代码部分的解释:

  1. Slider:
    • id: control:为滑动条分配一个ID,以便在QML的其他部分引用它。
    • value: 0.5:设置滑动条的初始值。这个值介于0和1之间,表示滑动条当前位置相对于其总长度的比例。
  2. background:
    • background属性定义了滑动条的背景。
    • 在这里,background是一个Rectangle,它作为滑动条的轨道。
    • implicitWidth: 200 和 implicitHeight: 4:设置背景矩形的隐式宽度和高度。隐式宽度是建议的宽度,而实际宽度可能会受到父元素布局的影响。隐式高度决定了轨道的厚度。
    • width: control.availableWidth:设置背景矩形的实际宽度为滑动条可用宽度。
    • height: implicitHeight:设置背景矩形的高度为其隐式高度。
    • radius: 2:设置背景矩形的圆角半径。
    • color: "#bdbebf":设置背景矩形的颜色。
    • 内部的Rectangle表示滑动条当前值所对应的填充部分。它的宽度根据control.visualPosition(滑动条当前位置的比例)来计算,颜色为深蓝色(#1a95f3)。
  3. handle:
    • handle属性定义了滑动条的手柄。
    • 在这里,handle也是一个Rectangle,用户可以通过拖动它来改变滑动条的值。
    • x属性根据control.visualPosition和手柄的宽度来计算手柄的位置,确保手柄始终位于滑动条当前值所对应的位置上。
    • implicitWidth: 26 和 implicitHeight: 26:设置手柄的隐式宽度和高度。
    • radius: 13:设置手柄的圆角半径。
    • color属性根据手柄是否被按下(control.pressed)来改变颜色。如果被按下,颜色变为稍暗的蓝色(#167dcb);否则,保持为深蓝色(#1a95f3)。
    • border.color: "#bdbebf":设置手柄边框的颜色,与背景颜色相同,以便在视觉上融合。

注意

  • 在这个QML代码中,滑动条的backgroundhandle都是自定义的,这意味着它们不会继承Slider控件的默认样式。这种自定义方式提供了更大的灵活性,允许开发者根据需求调整控件的外观。
  • 滑动条的value属性表示其当前值,可以通过绑定到其他QML属性或JavaScript函数来响应滑动条的变化。
  • 滑动条的leftPaddingtopPaddingavailableWidthavailableHeight属性是由Slider控件内部计算的,用于确定控件的可用空间和内边距。这些属性在自定义backgroundhandle时非常有用,因为它们允许开发者根据滑动条的实际布局来调整元素的位置和大小。

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

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

相关文章

什么是.net framework,什么是.net core,什么是.net5~8,版本对应关系

我不知道有多少人和我一样,没学习过.netCore,想要学习,但是版本号太多就蒙了,不知道学什么了,这里解释下各个版本的关系 我们一般开始学习微软的时候,都是开始学习的.netframework,常用的就是4…

【2025最新计算机毕业设计】基于Spring Boot+Vue影院购票系统(高质量源码,提供文档,免费部署到本地)

作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

matlab中高精度计算函数vpa与非厄米矩阵本征值的求解

clear;clc;close all tic %并行设置% delete(gcp(nocreate));%关闭之前的并行 cparcluster(local); c.NumWorkers50;%手动设置线程数(否则默认最大线程为12) parpool(c, c.NumWorkers); %并行设置%w1; u2.5;N30;valstozeros(2*N2,100); v10linspace(-3,3,100).;parfor jj1:leng…

Linux第101步_了解LCD屏驱动“panel-simple.c”

了解LCD屏驱动“panel-simple.c”有助于修改屏驱动。自己另外单独写屏驱动,这是不现实的,所以学会在源程序的基础上修改,才是最佳的学习方法,这就是我们学习框架的主要原因。在Limux系统中,主流的显示框架有两种:DRM(D…

TI毫米波雷达原始数据解析之Lane数据交换

TI毫米波雷达原始数据解析之Lane数据交换 背景Lane 定义Lane 确认确认LVDS Lane 数量的Matlab 代码数据格式参考 背景 解析使用mmWave Studio 抓取的ADC Data Lane 定义 芯片与DCA100之间的数据使用LVDS接口传输,使用mmWave Studio 配置过程中有一个选项是LVDS L…

2-markdown转网页页面设计 --[制作网页模板]

页面设计 将Markdown转换为网页页面设计通常涉及以下几个步骤: 编写Markdown内容: 首先,你需要创建或已有以Markdown格式编写的文档。Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然…

Linux驱动开发(18):linux驱动并发与竞态

并发是指多个执行单元同时、并行执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问 则很容易导致竞态。对于多核系统,很容易理解,由于多个CPU同时执行,多个CPU同时读、写共享资源时很容易造成竞态。…

Elasticsearch: 高级搜索

这里写目录标题 一、match_all匹配所有文档1、介绍: 二、精确匹配1、term单字段精确匹配查询2、terms多字段精确匹配3、range范围查询4、exists是否存在查询5、ids根据一组id查询6、prefix前缀匹配7、wildcard通配符匹配8、fuzzy支持编辑距离的模糊查询9、regexp正则…

GitLab集成Runner详细版--及注意事项汇总【最佳实践】

一、背景 看到网上很多用户提出的runner问题其实实际都不是问题,不过是因为对runner的一些细节不清楚导致了误解。本文不系统性的介绍GitLab-Runner,因为这类文章写得好的特别多,本文只汇总一些常几的问题/注意事项。旨在让新手少弯路。 二、…

Spring Boot 中 RabbitMQ 的使用

目录 引入依赖 添加配置 Simple(简单模式) 生产者代码 消费者代码 ​编辑 Work Queue(工作队列) 生产者代码 消费者代码 Publish/Subscribe(发布/订阅) 生产者代码 消费者代码 Routing&#x…

【linux基础I/O(1)】文件描述符的本质重定向的本质

目录 前言1. 理解C语言的文件接口2. 操作文件的系统调用接口2.1 open函数详解2.2 close函数详解2.3 write函数详解2.4 read函数详解 3. 文件描述符fd详解4. 文件描述符的内核本质5. 怎样理解Linux下一切皆文件?6. 理解输出输入重定向7. 重定向的系统调用8. 总结 前言 “在Lin…

全面解析 Node-RED:功能、Docker 部署与实战示例

言简意赅的讲解Node-RED解决的痛点 Node-RED 是一个基于流的编程工具,专为物联网(IoT)应用而设计。它通过可视化的编程界面,使开发者能够轻松地连接各种硬件设备、API 以及在线服务,构建复杂的应用流程。本文将详细介…

2、pycharm常用快捷命令和配置【持续更新中】

1、常用快捷命令 Ctrl / 行注释/取消行注释 Ctrl Alt L 代码格式化 Ctrl Alt I 自动缩进 Tab / Shift Tab 缩进、不缩进当前行 Ctrl N 跳转到类 Ctrl 鼠标点击方法 可以跳转到方法所在的类 2、使用pip命令安装request库 命令:pip install requests 安装好了…

2025-01-04 Unity插件 YodaSheet1 —— 插件介绍

文章目录 1 介绍2 工作原理2.1 ScriptableObject -> YadeSheetData2.2 YadeDatabase 存储多个 YadeSheetData 3 用途4 缺点5 推荐 1 介绍 ​ Yade 提供类似于 Excel 或者 Google Sheets 的表格编辑器,可以轻松地在 Unity 编辑器中 编辑,搜索&#xf…

用 C++ 创建控制台计算器

本文内容 先决条件创建应用项目验证新应用是否生成并运行编辑代码 显示另外 5 个 C 程序员通常从在命令行上运行的“Hello, world!”应用程序开始。 你将以本文为起点,逐步进阶,加深学习难度:计算器应用。 先决条件 在 Visual Studio 中…

IDEA 撤销 merge 操作(详解)

作为一个开发者,我们都知道Git是一个非常重要的版本控制工具,尤其是在协作开发的过程中。然而,在使用Git的过程中难免会踩一些坑,今天我来给大家分享一个我曾经遇到的问题:在使用IDEA中进行merge操作后如何撤销错误的合…

限时特惠,香港服务器,低至53元/年

家人们谁懂啊!香港服务器这价格简直逆天了,居然比内地的还便宜!就拿阿里云来说,人家最低配置的服务器,价格都很难做到这么亲民。 最低配的就不说了,2 核 4G 的配置,应对日常业务稳稳当当&#x…

EF Core配置及使用

Entity Framework Core是微软官方的ORM框架。 ORM:Object Relational Mapping。让开发者用对象操作的形式操作关系数据库。 EF Core是对于底层ADO.NET Core的封装,因此ADO.NET Core支持的数据库不一定被EF Core支持。 代码创建数据库Code First 建实…

GPT分区 使用parted标准分区划分,以及相邻分区扩容

parted 是一个功能强大的命令行工具,用于创建和管理磁盘分区表和分区。它支持多种分区表类型,如 MBR(msdos)、GPT(GUID Partition Table)等,并且可以处理大容量磁盘。parted 提供了一个交互式界…

【mybatis-plus问题集锦系列】使用mybatis实现数据的基础增删改查

使用mybatis实现数据的基础增删改查,简单的增删改查操作方法步骤 代码实现 pom.xml <dependencies><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.…