QML输入控件: Slider的高级外观定制(音视频控制条)
目录
- 引言
- 相关阅读
- 示例1:基础样式定制
- 要点
- 效果
- 示例2:音量控制滑块
- 要点
- 效果
- 示例3:视频进度条
- 要点
- 效果
- 解决问题
- 总结
- 工程下载
引言
在现代用户界面设计中,滑块控件(Slider)是一个不可或缺的交互元素。它不仅能让用户直观地进行数值调节,还能通过精心的设计为应用增色不少。本文将通过三个实用的例子,展示如何在QML中对Slider控件进行深度定制,打造出独具特色的用户界面效果。
相关阅读
- QML输入控件: Slider的基础用法与样式
示例1:基础样式定制
该展示了如何创建一个基础的自定义样式滑块:
// SliderStyle3.qml
import QtQuick
import QtQuick.Controls
import QtQuick.Controls.Basic
import Qt5Compat.GraphicalEffectsWindow {width: 400height: 300visible: truetitle: qsTr("Slider - 自定义样式")color: "#2c3e50"Column {anchors.centerIn: parentspacing: 20// 值显示Text {anchors.horizontalCenter: parent.horizontalCentertext: Math.round(customSlider.value)color: "#ecf0f1"font.pixelSize: 18}// 滑块Slider {id: customSliderwidth: 300height: 40from: 0to: 100value: 50// 背景轨道background: Rectangle {x: customSlider.leftPaddingy: customSlider.topPadding + customSlider.availableHeight / 2 - height / 2width: customSlider.availableWidthheight: 4radius: 2color: "#34495e"// 已完成部分Rectangle {width: customSlider.visualPosition * parent.widthheight: parent.heightcolor: "#2ecc71"radius: 2}}// 手柄handle: Rectangle {x: customSlider.leftPadding + customSlider.visualPosition * (customSlider.availableWidth - width)y: customSlider.topPadding + customSlider.availableHeight / 2 - height / 2width: 20height: 20radius: 10color: customSlider.pressed ? "#13a333" : "#ecf0f1"border.color: "#2ecc71"border.width: 2// 手柄动画Behavior on color {ColorAnimation { duration: 100 }}}}}
}
要点
- 使用Rectangle自定义背景轨道和手柄
- 通过visualPosition属性控制进度条显示
- 添加按压状态动画效果
- 采用扁平化设计风格
效果

示例2:音量控制滑块
第二个示例展示了一个实用的音量控制滑块:
// SliderAudio.qml
import QtQuick
import QtQuick.Controls
import QtQuick.LayoutsWindow {width: 400height: 300visible: truetitle: qsTr("Slider - 音量控制")color: "#1e1e2e"RowLayout {anchors.centerIn: parentwidth: parent.width * 0.8spacing: 10// 音量图标Image {id: volumeIconsource: volumeSlider.value <= 0 ? "/icons/mute.png" : "/icons/volume.png"width: 24height: 24Layout.alignment: Qt.AlignVCenterMouseArea {anchors.fill: parentonClicked: {if (volumeSlider.value > 0) {volumeSlider.lastValue = volumeSlider.valuevolumeSlider.value = 0} else {volumeSlider.value = volumeSlider.lastValue || 50}}}}// 音量滑块Slider {id: volumeSliderLayout.fillWidth: truepadding: 0property real lastValue: 50from: 0to: 100value: 60stepSize: 1live: true// 自定义背景background: Rectangle {x: volumeSlider.leftPaddingy: volumeSlider.topPadding + (volumeSlider.availableHeight - height) / 2width: volumeSlider.availableWidthheight: 8radius: 4color: "#313244"// 音量进度条Rectangle {width: volumeSlider.visualPosition * parent.widthheight: parent.heightradius: 4gradient: Gradient {orientation: Gradient.HorizontalGradientStop { position: 0.0; color: "#89b4fa" }GradientStop { position: 1.0; color: "#cba6f7" }}}}// 自定义手柄handle: Rectangle {x: volumeSlider.leftPadding + volumeSlider.visualPosition * (volumeSlider.availableWidth - width)y: volumeSlider.topPadding + volumeSlider.availableHeight / 2 - height / 2width: 16height: 16radius: 8color: volumeSlider.pressed ? "#cba6f7" : "#f9f9f9"border.color: "#89b4fa"border.width: 2// 添加鼠标区域以确保可以拖动MouseArea {anchors.fill: parentcursorShape: Qt.PointingHandCursordrag {target: parentaxis: Drag.XAxisminimumX: 0maximumX: volumeSlider.availableWidth - parent.width}onPositionChanged: {if (drag.active) {volumeSlider.value = (parent.x / (volumeSlider.availableWidth - parent.width)) * (volumeSlider.to - volumeSlider.from)}}}}}// 音量值显示Text {text: Math.round(volumeSlider.value) + "%"color: "#cdd6f4"font.pixelSize: 14Layout.alignment: Qt.AlignVCenterLayout.preferredWidth: 40}}
}
要点
- 集成音量图标、滑块和数值显示
- 实现静音切换功能
- 使用渐变色提升视觉效果
- 添加百分比显示
效果

示例3:视频进度条
第三个示例展示了一个专业的视频进度控制器:
// SliderVideo.qml 代码太长,展示核心代码
ColumnLayout {// 时间显示RowLayout {Text { text: formatTime(currentTime) }Text { text: formatTime(videoSlider.to) }}Slider {id: videoSliderbackground: Rectangle {// 缓冲进度Rectangle {width: parent.width * 0.7color: "#565f89"}// 播放进度Rectangle {width: videoSlider.visualPosition * parent.widthgradient: Gradient {GradientStop { position: 0.0; color: "#7aa2f7" }GradientStop { position: 1.0; color: "#bb9af7" }}}}}// 控制按钮RowLayout {Repeater {model: controlButtonsdelegate: Rectangle {// 播放、快进、快退按钮}}}
}
要点
- 实现完整的视频播放控制功能
- 显示缓冲进度和播放进度
- 集成播放控制按钮
- 时间格式化显示
- 使用Timer实现播放功能
效果

解决问题
运行时遇到报错:
The current style does not support customization of this control (property: “handle” item: QQuickRectangle(0x1e87663c1b0, parent=0x0, geometry=0,0 12x12)). Please customize a non-native style (such as Basic, Fusion, Material, etc). For more information, see: https://doc.qt.io/qt-6/qtquickcontrols2-customize.html#customization-reference
解决方法:
import QtQuick.Controls.Basic
总结
通过这三个示例,我们展示了QML Slider控件的强大定制能力:
- 基础样式定制:展示了如何从零开始定制Slider的外观
- 音量控制:结合实际应用场景,实现了完整的音量控制功能
- 视频进度条:展示了复杂业务场景下的综合应用
这些示例不仅展示了控件的定制方法,更重要的是展示了如何将控件与实际业务需求相结合,打造出既美观又实用的用户界面。
工程下载
完整代码已上传至GitCode,您可以通过以下链接获取:QML Slider Examples

项目包含:
- 完整的 CMake 构建配置
- 所有示例的 QML 源文件
- 示例中使用的图标资源
相关文章:
QML输入控件: Slider的高级外观定制(音视频控制条)
目录 引言相关阅读示例1:基础样式定制要点效果 示例2:音量控制滑块要点效果 示例3:视频进度条要点效果 解决问题总结工程下载 引言 在现代用户界面设计中,滑块控件(Slider)是一个不可或缺的交互元素。它不仅能让用户直观地进行数…...
密码学基础——古典密码学
目录 一、定义 特点: 二、发展阶段 三、代换密码 1.单表代换密码 1.1恺撒密码 1.2 移位变换 1.3 仿射变换 2.多表代换密码 维吉尼亚密码 四、置换密码 栅栏密码 一、定义 古典密码学是指在现代密码学出现之前,使用较为简单的数学方法和手工…...
KingbaseES物理备份还原之备份还原
此篇续接上一篇<<KingbaseES物理备份还原之物理备份>>,上一篇写物理备份相关操作,此篇写备份还原的具体操作步骤. KingbaseES版本:V009R004C011B003 一.执行最新物理备份还原 --停止数据库服务,并创建物理备份还原测试目录 [V9R4C11B3192-168-198-198 V8]$ sys_ct…...
C++友元与动态内存
一、友元 友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是它可以访问类中的私有成员。 类具有封装和信息隐藏的特性。…...
catch-all路由
介绍 ✅ 什么是 Catch-All 路由? Catch-All 路由 指的是:一个能匹配“任意路径”的通配型路由。 它一般会使用 路径参数 path 类型,比如: app.get("/{full_path:path}") async def fallback_handler(full_path: str):…...
jdk21新特性详解使用总结
jdk21新特性详解总结 1.StringBuilder和StringBuffer新增了一个repeat方法 /*** Java 21的StringBuilder和StringBuffer新增了一个repeat方法*/public static void repeatStr(){var sbnew StringBuilder().repeat("*",10);System.out.println(sb);}运行结果如下&…...
子网划分超AI教程:5分钟教会划分子网
友情提示:本文内容由银河易创AI(https://ai.eaigx.com)创作平台deepseek-v3模型生成,仅供参考 前言 子网划分(Subnetting)是网络工程师和IT运维人员必须掌握的基础技能,但对于初学者来说&#…...
制造业数字化转型:流程改造先行还是系统固化数据?基于以MTO和MTS的投资回报分析
1. 执行摘要 制造业正经历一场深刻的数字化转型,企业面临着先进行流程改造以优化运营,还是直接上线系统以固化数据的战略选择。本文深入分析了以销定产(MTO)和以产定销(MTS)两种主要生产模式下,…...
【实用技巧】电脑重装后的Office下载和设置
写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言下载设置总结互动致谢参考目录导航 前言 在数字化办公时代,Windows和…...
使用Android 原生LocationManager获取经纬度
一、常用方案 1、使用LocationManager GPS和网络定位 缺点:个别设备,室内或者地下停车场获取不到gps定位,故需要和网络定位相结合使用 2、使用Google Play服务 这种方案需要Android手机中有安装谷歌服务,然后导入谷歌的第三方库: 例如:i…...
STM32开发板上生成PWM正弦波
在STM32开发板上生成正弦波通常需要结合定时器(TIM)、数模转换器(DAC)或脉宽调制(PWM)以及时钟系统的配置。以下是分步指南: 方法1:使用DAC 定时器(推荐) 步…...
量子计算与人工智能融合的未来趋势
最近研学过程中发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。 在当今科技飞速发展…...
关于登录鉴权session、cookie和token
一、cookie是用来解决什么问题的? 假如现有业务需求:当浏览器发起一个url请求之后,在一个会话周期内,服务端需要判断这个用户是否第一次发起请求,第一次请求展示的页面跟第N次请求需要响应的页面不同的。现在我们大部分…...
206. 反转链表 92. 反转链表 II 25. K 个一组翻转链表
leetcode Hot 100系列 文章目录 一、翻转链表二、反转链表 II三、K 个一组翻转链表总结 一、翻转链表 建立pre为空,建立cur为head,开始循环:先保存cur的next的值,再将cur的next置为pre,将pre前进到cur的位置…...
实时内核稳定性 - scheduling while atomic
scheduling while atomic问题 根因:未成对使用获取cpu_id的函数[ 291.881071][ 0] [XW]: type=0x00000003 cpuid=4 time=1725877230 subj...
离线语音识别 ( 小语种国家都支持)可定制词组
1产品介绍 离线语音模组采用神经网络算法,支持语音识别、自学习等功能。运用此模组将 AI 技 术赋能产品,升级改造出语音操控的智能硬件 ( 例如风扇、台灯、空调、马桶、按摩椅、运 动相机、行车记录仪等 ) 。支持全球多种语言识别,如中文…...
网络华为HCIA+HCIP 策略路由,双点双向
目录 路由策略,策略路由 策略路由优势 策略路由分类 接口策略路由 双点双向 双点双向路由引入特点: 联系 路由回灌和环路问题 路由策略,策略路由 路由策略:是对路由条目进行控制,通过控制路由条目影响报文的转发路径,即路…...
【面试篇】JVM
文章目录 一、JVM 内存结构1. 请详细描述 JVM 的内存结构,各个区域的作用是什么?2. 堆内存是如何划分的?新生代和老年代的比例是多少?3. Eden 区和 Survivor 区的作用是什么?它们之间是如何协作的?4. 方法区…...
【TI MSPM0】ADC DAC学习
一、样例展示 通过ADC0触发单次采样,如果采样结果大于0.5倍的VDD,就点亮LED 否则熄灭LED 编译加载运行这个历程,提供一个电压到A0_2引脚上,电压范围在0-VCC之间同时观察LED1.在上电后,默认将ADC配置到正确的引脚模式,…...
Cesium系列:从入门到实践,打造属于你的3D地球应用
一、Cesium简介 CesiumJS 是一个开源的 JavaScript 库,它能够帮助开发者创建出具有卓越性能、高精度、出色视觉质量和易用性的世界级 3D 地球仪和地图。无论是在航空航天领域,用于模拟飞行路径和展示卫星数据;还是在智能城市中,用…...
笔记1——数据通信网络基础
一、概述 数据通信网络:由路由器、交换机、防火墙、无线设备以终端构成的网络 功能:实现数据互通 二、网络设备 交换机: 特点:距离终端用户最近的设备 作用:终端接入、二层交换机 广播域:交换机连接的终端构成一个广播…...
Linux系统程序设计:从入门到高级Day01
知识点1 【系统调用】 系统调用的概述 系统调用:内核 提供给 用户 可以 操作内核 的一组函数接口 关系:用户 借助 系统调用 操作内核 进程的空间分为:内核空间 和 用户空间 用户一般都是在用户空间操作的,但是有的时候用户需要…...
openEuler24.03 LTS下安装HBase集群
前提条件 安装好Hadoop完全分布式集群,可参考:openEuler24.03 LTS下安装Hadoop3完全分布式 安装好ZooKeeper集群,可参考:openEuler24.03 LTS下安装ZooKeeper集群 HBase集群规划 node2node3node4MasterBackup MasterRegionServ…...
关于testng.xml无法找到类的问题
问题:testng.xml添加测试类的时候飘红 解决办法: 1.试图通过自动生成testng.xml插件去解决,感觉也不是这个问题,没有尝试; 2.以为是创建包的方式不对,重新删除后新建--还是找不到 想新建类的时候发现从m…...
数据结构:探秘AVL树
本节重点 理解AVL树的概念掌握AVL树正确的插入方法利用_parent指针正确更新平衡因子掌握并理解四种旋转方式:左单旋,右单旋,左右双旋,右左双旋 一、AVL树的概念 AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis&…...
Linux 入门:基础开发工具(上)vim,gcc/g++,make/makefile
目录 一.软件包管理器 一).软件包 二).安装软件 三).删除软件 二.编辑器vim 一).vim的基本介绍 1.正常/普通/命令模式(Normal mode) 2.插入模式(Insert mode) 3.底行模式(last line mode) 二).vim的基本操作 …...
计算机科学基础设施之数学:科研工具、资源与环境详介
李升伟 整理 数学科研涉及广泛的工具、资源和环境,涵盖从理论分析到数值模拟、从数据获取到论文发表的各个环节。以下是对数学科研中常用工具、资源和环境的详细介绍: 一、数学科研工具 1. 文献检索与管理工具 Google Scholar:全球最大的…...
Turtle事件处理(键盘与鼠标交互)
Turtle 提供了 事件驱动编程,允许我们使用 键盘 和 鼠标 控制 Turtle,从而实现交互式绘图。例如,我们可以让 Turtle 响应 按键、鼠标点击 和 拖动 事件,使其根据用户的输入进行移动、旋转或绘制图形。 1. 事件机制概述 Turtle 的事件处理主要依赖 turtle.Screen() 提供的 …...
5、无线通信基站的FPGA实现架构
基站(Base Station,BS),也称为公用移动通信基站,是无线电台站的一种形式,具体则指在一定的无线电覆盖区中,通过移动通信交换中心,与移动电话终端之间的信息传递的无线电收发信电台。…...
关于 UPDATE 语句 和 SELECT ... FOR UPDATE 的对比分析,包括语法、功能、锁机制、使用场景及示例代码
以下是关于 UPDATE 语句 和 SELECT ... FOR UPDATE 的对比分析,包括语法、功能、锁机制、使用场景及示例代码: 1. UPDATE 语句 功能 直接修改数据:立即更新表中的数据,并提交修改。无显式锁:虽然会自动加锁ÿ…...
