当前位置: 首页 > news >正文

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.lryc.cn/news/357290.html

相关文章:

  • 【网络协议Http】Http中get,post,put,delete区别
  • 软硬中断区别,磁盘块、扇区、页区别与之间的关系
  • 在线思维导图编辑!3个AI思维导图生成软件推荐!
  • 使用 Ubuntu + Docker + Vaultwarden + Tailscale 自建密码管理器
  • YOLOv7添加注意力机制和各种改进模块
  • 【OpenGL第一个程序】
  • GPT-4O神器来袭!自动生成Figma设计稿,移动端开发瞬间加速!
  • 清华大学提出IFT对齐算法,打破SFT与RLHF局限性
  • TS(TypeScript)中Array数组无法调出使用includes方法,显示红色警告
  • 基于Kafka的日志采集
  • 某烟草企业数字化转型物流信息化咨询项目规划方案(117页PPT)
  • 失落的方舟 命运方舟台服封号严重 游戏封IP怎么办
  • 2.10 mysql设置远程访问权限
  • C# 证件照替换底色与设置背景图---PaddleSegSharp
  • HCIA-HarmonyOS Device Developer 课程大纲
  • 洗地机哪个牌子最好用?十大名牌洗地机排行榜
  • Unity开发——XLua热更新之Hotfix配置(包含xlua获取与导入)
  • Qt 基于FFmpeg的视频转换器 - 转GIF动图
  • HTML新春烟花盛宴
  • 第十四届蓝桥杯c++研究生组
  • KDD 2024|基于隐空间因果推断的微服务系统根因定位
  • 白鹭群优化算法,原理详解,MATLAB代码免费获取
  • 【源码】2024完美运营版商城/拼团/团购/秒杀/积分/砍价/实物商品/虚拟商品等全功能商城
  • Java-数组内存解析
  • Spring Cache --学习笔记
  • NTP服务的DDoS攻击:原理和防御
  • 【面试干货】事务的并发问题(脏读、不可重复读、幻读)与解决策略
  • 函数式接口:现代编程的利器
  • 2022职称继续教育--深入实施新时代人才强国战略 加快建设世界重要人才中心和创新高地
  • kube-prometheus-stack 识别 k8s 集群内所有的 ServiceMonitor 和 PrometheusRule