QT——QSlider实现,QT滑动控件的使用

目录

    • 简介
    • 滑动块调节两种方法
    • 滑动条触发信号量
    • 理想滑动块运用(参考)

简介

QT中滑动条的控件叫QSlider,继承自QAbstractSlider类。
主要用途是通过滑块的滑动的方式在一定范围内调节某个值。根据调节的后得到的结果去执行一些处理,比如将值写入或者用这个值进行计算,或者进行值传输等等。
滑块

通常使用这个控件是希望我们调节滑块到指定位置后,发生一个触发事件,在这个触发事件中,我们获取最后的值,然后进行处理操作。
查阅文档发现滑块的一些槽函数触发事件好像都无法直接实现这一目的,滑块的触发事件会多次触发,也就是不是到最后才触发。
UI界面可拖拽使用的Slider如下图,一个是水平的一个是垂直的滑块。

滑动块

滑动块调节两种方法

首先我们简单介绍以下滑动块值变动调节的方法。

在这里插入图片描述

滑动块由滑块和滑动条组成,想要改变滑动块的值有两种方式
1.按下滑动块,进行移动,再松开。
2.点击滑动条,滑动块会朝点击方向进行移动一段距离。这种方法不会按下滑动块(具体多少没有深究,限制值也不知,但是确实不能点到哪,滑动块就直接移动到哪)

注意这两者的区别,前者需要按住,且滑动,后者只需要点击就可以实现。这些操作会影响后面信号量的触发。

滑动条触发信号量

可转换的继承自QAbstractSlider的槽函数有以下6个。
槽函数
其实这6个转换未槽函数的实现就是对应着QAbstractSlider的6个信号量触发函数

//Signals 信号量void actionTriggered(int action)void rangeChanged(int min, int max)void sliderMoved(int value)void sliderPressed()void sliderReleased()void valueChanged(int value)

前面转到槽函数的使用就是依据这6个信号量的触发,执行对应的函数。函数内容自己按需求设计。

 void sliderMoved(int value)

这个信号量触发的条件是按下滑块并滑动,就会发出这个信号量,触发对应的槽函数。需要注意的是只要滑块动就会触发,也就是你从1滑动到10,那么1-10中每有一个值是可取的,它都会触发一次。(我感觉这个信号量废了,除非你真就每次只滑动一格,那你没必要用滑动块了)

 void sliderPressed()

这个信号量是当滑块按下时触发信号量,执行槽函数,一般情况下也不会用吧,因为按下的时候值是没变的,此时触发不需要进行什么操作。

 void sliderReleased()

这个信号量是当滑块释放时,触发信号量可以执行对应的槽函数。这个就比较有用了,可以捕捉到滑动完滑块的那个瞬间,那也是最终的位置,此时的结果正是调节完的结果,执行对应的槽函数去进行值处理。其实这个信号量就可以完成滑块的基本需求了。 但是也还有些局:通过点击滑动块的方式无法触发信号量。

 void valueChanged(int value)

这个信号量是滑块滑动,值发生变化时,就会触发,其实一般使用起来和前面的sliderMoved基本相同,就是少了一个按下滑动块的前提,(不管按不按下滑块)值发生变化时,这个信号量都会触发。同样的从1-10变化,中间每个值都会触发一次。

 void actionTriggered(int action)void rangeChanged(int min, int max)

这两个函数的使用不明,也没有深入研究,有知道的大佬可以在评论区留言补充,只知道通过测试,滑动滑块的操作这两个信号量不会触发,猜测是属于如果滑块的属性发生变化了才会触发,比如修改了滑块可滑动值的范围。

理想滑动块运用(参考)

前面提到,我们使用滑块控件是希望进行滑块移动改变值(两种方式),并获取值进行对应的数值操作。

通过sliderReleased()滑动块可以实现基本的拖动滑块来进行值变化并获取最终值触发信号量,在槽函数中进行数值操作。但是提到了有局限:对于点击滑动条进行的值变化无法触发信号量,这样会有一些BUG和不好的体验。

比较理想的使用方式如下:
结合 void sliderReleased(),void valueChanged(int value)一起实现,分别用来判断第一种和第二种改变值的方式。两者结合使用相同的数值处理函数即可实现改功能。
第一种方式直接槽函数实现;
第二种方式需要在槽函数种加一个判断——滑块是否处于按下状态,不处于按下的情况下值发生改变才算是二种方式触发,即点击滑动条实现值变化。
具体实现如下:
1、在UI界面拖动一个滑动块设计界面。

在这里插入图片描述
给控件重命名未“SliderTest”

在这里插入图片描述
选中控件并右键,选中转为槽
在这里插入图片描述

分别实现这两个槽函数。

在这里插入图片描述
之后会在源文件中产生两个槽函数,已经自动绑定好触发事件。无需在手动绑定。

void MainWindow::on_SliderTest_sliderReleased()
{
}void MainWindow::on_SliderTest_valueChanged(int value)
{
}

同时头文件也会有定义。
最后按前面的逻辑配置槽函数。代码如下:

void MainWindow::on_SliderTest_sliderReleased()
{//滑动块释放触发,第一种变值方式valueChange(ui->SliderTest->value());//获取当前滑动控件值并传入
}void MainWindow::on_SliderTest_valueChanged(int value)
{if(!(ui->SliderTest->isSliderDown())){//判断滑块是否未按下//实现点击滑动条切值,第二种变值方式valueChange(value);}else{//滑动触发,会多次触发,不建议进行操作处理,特殊情况除外}
}
void MainWindow::valueChange(int value){//值变化的数值处理。
}

isSliderDown()判断滑块是否按下
只需要在valueChange()函数中,编写自己需要的数值处理逻辑即可。
注意:“ MainWindow::”这个类名要改为和自己一样的,另外函数valueChange()需要自己添加定义到头文件。

void valueChange(int value);

以上就是全部内容了,有点啰嗦,欢迎批评指正,有更好的方法欢迎评论区留言。

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

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

相关文章

第十三章 进程与线程

第十三章 进程与线程 程序与进程的概念 程序: 英文单词为Program,是指一系列有序指令的集合,使用编程语言所编写,用于实现一定的功能。 进程: 进程则是指启动后的程序,系统会为进程分配内存空间。 函数式…

浅析R16移动性增强那些事儿(DAPS/CHO/MRO)

R16移动性增强相关技术总结 Dual Active Protocol Handover Dual Active Protocol Handover意为双激活协议栈切换,下文简称DAPS切换,DAPS切换的核心思想是切换过程中,在UE成功连接到目标基站前继续保持和源基站的连接和数据传输,…

贷款借钱平台 小额贷款系统开发小额贷款源码 贷款平台开发搭建

这款是贷款平台源码/卡卡贷源码/小贷源码/完美版 后台51800 密码51800 数据库替换application/database.php程序采用PHPMySQL,thinkphp框架代码开源,不加密后台效果:手机版效果 这款是贷款平台源码/卡卡贷源码/小贷源码/完美版 后台51800 密码…

【软考】2024年5月系统架构设计师考试感受

目录 一 考试时间 二 考试方式 三 考试批次安排 四 回忆版真题 五 考试感受 一 考试时间 2024年5月系统架构设计师考试时间如下: 5🈷️25日上午 8点30-12点30: 综合知识和案例分析💚 5🈷️25日下午 14点30-16点30: 论文…

《庆余年算法番外篇》:范闲通过最短路径算法在阻止黑骑截杀林相

剧情背景 在《庆余年 2》22集中,林相跟大宝交代完为人处世的人生哲理之后,就要跟大宝告别了 在《庆余年 2》23集中,林相在告老还乡的路上与婉儿和大宝告别后 范闲也在与婉儿的对话中知道黑骑调动是绝密,并把最近一次告老还乡梅…

民国漫画杂志《时代漫画》第39期.PDF

时代漫画39.PDF: https://url03.ctfile.com/f/1779803-1248636473-6bd732?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

Base64码转换

title: Base64码转换 date: 2024-06-01 20:30:28 tags: vue3 后端图片前端显示乱码 现象 后端传来一个图片,前端能够接收,但是console.log()后发现图片变成了乱码,但是检查后台又发现能够正常的收到了这张图片。 处理方法 笔者有尝试将图…

Leetcode3165. 不包含相邻元素的子序列的最大和(Go中的线段树分治包含多类数据使用maintain进行维护)

题目截图 题目分析 不能取相邻的,就是打家劫舍 然后更改某一个值就是单点更新 更新后,需要更新区间的值 需要注意的是,使用分治时需要考虑到一头一尾的问题,所以有4种情况(选or不选在两个位置) 这四种情况…

利用 Scapy 库编写 Teardrop 攻击脚本

一、介绍 Teardrop攻击是一种历史上比较著名的拒绝服务(Denial of Service, DoS)攻击,主要利用了IP数据包分片和重组过程中的漏洞来攻击目标系统。以下是对Teardrop攻击的详细介绍: 1.1 攻击原理 IP协议允许数据包在传输过程中…

jpom ruoyi 发布后端

添加ssh 添加标签 添加仓库 添加构建 构建 命令 APP_NAMEenterprise IMAGE_NAMEenterprise:latest APP_PORT8080 RUN_ENVjenkins cd ruoyi-admin docker stop $APP_NAME || true docker rm $APP_NAME || true docker rmi $IMAGE_NAME || true docker build -f Dockerfil…

System-Verilog 实现DE2-115倒车雷达模拟

System-Verilog 实现DE2-115倒车雷达模拟 引言: 随着科技的不断进步,汽车安全技术也日益成为人们关注的焦点。在众多汽车安全辅助系统中,倒车雷达以其实用性和高效性脱颖而出,成为现代汽车不可或缺的一部分。倒车雷达系统利用超声…

Django ORM魔法:用Python代码召唤数据库之灵!

探索Django ORM的神奇世界,学习如何用Python代码代替复杂的SQL语句,召唤数据库之灵,让数据管理变得轻松又有趣。从基础概念到高级技巧,阿佑带你一步步成为Django ORM的魔法师,让你的应用开发速度飞起来! 文…

【Java】面向对象的三大特征:封装、继承、多态

封装 什么叫封装? 在我们写代码的时候经常会涉及两种角色: 类的实现者 和 类的调用者。 封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了,这样就降低了类使用者的学习和使用成本&a…

Windows环境安装redis

1、下载redis https://github.com/tporadowski/redis/releases 2、解压 .zip 3、更改文件名 更改文件名称为:redis 4、将本地解压后的redis,作为本地服务器下的应用服务 从redis文件路径下,执行cmd .\redis-server --service-install re…

LeetCode - 贪心(Greedy)算法集合(Python)[分配问题|区间问题]

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/139242199 贪心算法,是在每一步选择中,都采取当前状态下,最好或最优(即最有利)的选择&…

基于SSM框架的手机商城项目

后端: 订单管理 客户管理: 商品管理 类目管理 前端: 首页:

Python 学习笔记【1】

此笔记仅适用于有任一编程语言基础,且对面向对象有一定了解者观看 文章目录 数据类型字面量数字类型数据容器字符串列表元组 type()方法数据类型强转 注释单行注释多行注释 输出基本输出连续输出,中间用“,”分隔更复杂的输出格式 变量定义del方法 标识符…

基础—SQL—DQL(数据查询语言)排序查询

一、引言 排序查询这里面涉及的关键字:ORDER BY。在我们日常的开发中,这个是很常见的,比如打开一个网购的商城,这里面可以找到一个销量的排序、综合的排序、价格的排序(升序、降序)等等。接下来就学习这一部…

8-Django项目--登录及权限

目录 templates/login/login.html templates/login/404.html views/login.py utils/pwd_data.py auth.py settings.py 登录及权限 登录 views.py 中间件 auth.py templates/login/login.html {% load static %} <!DOCTYPE html> <html lang"en"&g…

19.1 简易抽奖

准备一个数组&#xff0c;里面添加10个奖品数据&#xff0c;让奖品数据快速的在盒子中随机显示&#xff0c;通过按钮控制盒子里面的内容停止。 效果图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…