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

QScrollBar滚动条、QSlider滑块、 QDial表盘

                        

QAbstractSlider 类、 QSCrollBar 类、 QSlider 类
一、 基本原理
1、 QAbstractSlider 继承自 QWidget,该类主要用于提供一个范围内的整数值,
2、 QAbstractSlider 类是 QScrollBar 类(滚动条)QSlider 类(滑块)QDial 类(表盘)的父类,因
此该类的属性和函数对这 3 个类都是可行的。
3、对于滚动条和滑块主要就是对其相关的一些值的设置,对于其外观样式比较单一,所以
动条
滑块的主要功能集中在 QAbstractSlider 类中,这个类提供了滚动条和滑块的共同作
用,主要是对其值作了描述,对于他们的外形,分别由 QScrollBar 类和 QSlider 决定。 所
以单独使用 QAbstractSlider 类什么也干不了,通常需要使用他的子类,若使用 sho()显示
该类的对象,他就是一个空的什么也没有的窗口。
4、注意:滚动条默认是不接受键盘焦点的,要使滚动条接受键盘焦点需使用
QWidget::setFocusPolicy()函数设置焦点策略。
5、滚动条、滑块、表盘的外观样式见下表

二、 最大/最小值和步长
1、 最大/最小值, 步长, 滚动范围,滚动条的滑块大小, 文档长度
1)、 单个步长:是指按一下滚动条(垂直方向)的向上/下箭头或按下键盘的上/下键时滑块
移动的距离。水平方向类似
2)、 页面步长:通常是指在滚动条上按下 page up 和 page down 键时移动的距离。 默认值
通常为 10。
3)、 最大和最小值是个逻辑意义上的值,它们不会改变滑块或滚动条的长度,详见后文。
4)、滚动范围:是指滚动条滑块可移动的距离。滚动范围始终是最大值减去最小值。
具体见下面的图示。

   
2、 滑块像素大小(即实际大小)
1)、 像素大小就是指滑块本身的大小(即使用 resize()函数设置的大小),这个大小是以像素
为单位的,以上讲解的最大/最小值、滚动范围、页面步长、文档长度都是逻辑长度,
是没有单位的。


2)、滑块像素大小受到页面步长的影响,


3)、本小节会把按下 page up 或 page down 时滚动到另一端的次数简称为滚动次数


4)、在不影响滑块像素大小的最小大小和最大大小时,可按如下公式计算(可参阅上一点
的图示)

滚动次数=(最大值 - 最小值) 除以 (页面步长)
滑块像素大小 = (文档长度的像素大小) 除以 (滚动次数 + 1)。

 滚动范围 = 最大值 - 最小值、
 文档逻辑长度=最大值 - 最小值 + 页面步长 = 滚动范围 + 页面步长
 滑块逻辑大小 = 页面步长
 滚动一次的像素距离 = (文档像素大小 - 滑块像素大小) 除以 滚动次数
比如,假设文档像素大小为 40,滚动次数为 1,则滑块像素大小为 20 像素,若滚
动次数为 2,则滑块像素大小为 40/3=13.333 像素。由此可见滚动次数越多,滑块
像素大小就越小,滚动次数越少,滑块像素大小就越大。


5)、当按以上公式计算出来的滑块像素大小小于滑块的最小像素大小时,滑块的像素大小
始终为最小像素大小保持不变。此时滚动次数、最小/最大值、滚动范围都不会改变,
但是文档逻辑长度和滑块逻辑大小不能再按以上公式进行计算。但滚动一次的像素距
离比较好计算,其公式为
滚动一次的像素距离 = (文档像素大小 - 滑块像素最小大小) 除以 滚动次数

三、 跟踪(Tracking)与当前值(Value)、 当前位置(Position)
1、 跟踪:若启用跟踪,则在拖动滑块或滚动条时会发送 valueChanged()信号,若禁用了跟踪,
则只在用户释放滑块或滚动条时,才会发送 valueChanged()信号


2、 当启用了跟踪时,当前值与当前位置是相同的,


3、 若未启用跟踪,则当前值与当前位置是不同的, 原理见下图

四、 QAbstractSlider 类中的属性函数
1、 orientation : Qt::Orientation
访问函数: Qt::Orientation orientation() const; void setOrientation(Qt::Orientation); //槽
设置滚动条或滑块的方向,只能是 Qt::Vertical(默认)或 Qt::Horizontal


2、 sliderDown : bool 访问函数: bool isSliderDown() const; void setSliderDown(bool);
描述滑块是否被按下,设置此属性后在外观上可能会没有变化,但会发送 sliderPressed()
信号


3、 maximum : int 访问函数: int maximum() const; void setMaximum (int);
4、 minimum : int 访问函数: int minimum() const; void setMinimum (int);
设置最大和最小值


6、 pageStep : int 访问函数: int pageStep () const; void setPageStep(int);
页面步长


7、 singleStep : int 访问函数: int singleStep() const; void setSingleStep (int);
单个步长


8、 sliderPosition : int 访问函数: int sliderPosition() const; void setSliderPosition (int);
信号: void sliderMoved(int value);
滑块的当前位置,若启用了跟踪,则此值与 value 属性的值相同。


9、 tracking : bool 访问函数: bool hasTracking () const; void setTracking (bool);
是否启用跟踪,若启用跟踪,则在拖动滑块或滚动条时会发送 valueChanged()信号,若禁
用了跟踪,则只在用户释放滑块或滚动条时,才会发送 valueChanged()信号。


10、 value : int 访问函数: int value()const; void setValue(int); //槽
信号: void valueChanged(int value);
滑块的当前值,该值被强制在最大值和最小值的范围内。


11、 invertedAppearance : bool
访问函数: bool invertedAppearance() const; void setInvertedAppearance (bool);
最大值和最小值是否出现相反的位置,若为 flase(默认),则不反转,若为 true 则反转。
该属性对滑块和表盘(dial)更有意义,对于滚动条则取决于样式,大多数样式会忽略滚动
条的此属性。 具体原理见下图


12、 invertedControls : bool 访问函数: bool invertedControls() const; void setInvertedControls (bool);
是否反转鼠标滚轮和键盘事件,若为 false,则鼠标滚轮向上滚或使用向上键将使值向最
小值调整。 注意:该属性是使用滚轮或键盘上的方向键移动滑块的方向为最大/最小值方
向,且影响的是键盘和鼠标滚轮事件,也就是说该属性不会影响滚动条上的箭头。 具体原
理见下图

                

13、 QAbstractSlider(QWidget *parent = Q_NULLPTR); //构造函数


14、 void setRange(int min, int max); //槽,
设置滑块的最大/最小值与 maximum 和 mimimum 属性相同,只不过使用该函数更方便


15、 void triggerAction(SliderAction action)
触发滑块, SliderAction 枚举见下表,此函数可以用来以编程的方式调整滑块的位置,比
如 triggerAction(QAbstractSlider::SliderPageStepAdd)表示把滑块向最大值方长移动一个页面步长。

QAbstractSlider::SliderAction 枚举(无标志)
作用:描述触发滑块动作的方式
成员说明
QAbstractSlider::SliderNoAction0无动作
QAbstractSlider::SliderSingleStepAdd1向最大值方向移动一个单个步长的距离
QAbstractSlider::SliderSingleStepSub2向最小值方向移动一个单个步长的距离
QAbstractSlider::SliderPageStepAdd3向最大值方向移动一个页面步长的距离
QAbstractSlider::SliderPageStepSub4向最小值方向移动一个页面步长的距离
QAbstractSlider::SliderToMinimum5把滑块移至最小值(home 键)
QAbstractSlider::SliderToMaximum6把滑块移至最大值(end 键)
QAbstractSlider::SliderMove7移动滑块

五、 QAbstractSlider 类中的信号
1、 void rangeChanged(int min, int max)
当最大/最小值改变时,发送此信号。


2、 void sliderMoved(int value)
当 sliderDown 属性为 true,且滑块移动时,发送此信号,即使关闭跟踪(tracking 属性),
也会发送此信号。通常表示用户使用鼠标拖动滑块时,注意:使用键盘方向键或 page up、
page down 或按下滚动条上的向上/下箭头都不会触发该信号,使用鼠标时需要按住滑块再
拖动滑块,才会发送此信号。


3、 void sliderPressed()
4、 void sliderReleased()
当用户用鼠标按下或释放滑块时发送以上信号,可使用 setSliderDown()函数以编程的方式
发送以上信号。 注意,以上信号是鼠标信号,也就是说对键盘可能会无效。


5、 void valueChanged(int value)
滑块的值改变时,发送此信号, tracking 属性对此信号有影响。


6、 void actionTriggered(int action)
触发滑块时发送, action 表示触发滑块时的动作, 见 triggerAction()函数。 比如,若滑快以
是单个步长增长,则 action 为 1(即 QAbstractSlider::SliderSingleStepAdd), 单击 end 可触发
QAbstractSlider::SliderToMaximum,此时 action 为 6,同理单击 home 可触发
QAbstractSlider::SliderToMinimum,使用其他方式不会触发最大/最小值。


六、 QScrollBar 类

1、 QScrollBar 类就只有两个构造函数, 其默认为取值为垂直,最小值为 0,最大值为 100,
单个步长为 1,页面步长为 10,初始位置为 0。 原型如下:
QScrollBar(QWidget *parent = Q_NULLPTR);
QScrollBar(Qt::Qrientation orientation, QWidget *parent = Q_NULLPTR);


七、 QSlider 类
1、 QSlider 类,除了从父类继承来的特性,就仅有刻度线的绘制了,详见下文。
2、 QSlider (QWidget * parent = Q_NULLPTR); //构造函数,默认为垂直。
QSlider (Qt :: Orientation orientation, QWidget * parent = Q_NULLPTR)


3、 tickInterval: int 访问函数: int tickInterval() const; void setTickInterval(int);
刻度线之间的间隔(见右图),间隔值是一个逻辑值而不是像素值,
若为 0(默认),将在单个步长和页面步长之间选择。

                                

4、 tickPosition: TickPosition
访问函数: TickPosition tickPosition() const; void setTickPosition(TickPosition);
描述刻度线的位置,默认为 QSlider::NoTicks(无刻度线),枚举 TickPosition 见下表

QSlider::TickPosition 枚举(无标志)
作用:描述刻度线的位置
成员说明
QSlider::NoTicks0无刻度线
QSlider::TicksBothSides3在两侧绘制刻度线
QSlider::TicksAbove1在(水平)滑块上方绘制刻度线
QSlider::TicksBelow2在(水平)滑块下方绘制刻度线
QSlider::TicksLeftTicksAbove在(垂直)滑块左侧绘制刻度线
QSlider::TicksRightTicksBelow在(垂直)滑块右侧绘制刻度线

八、 QDial 类
1、表盘的原理见下图

2、 QDial 类中的属性

1)、 QDial(QWidget *parent = Q_NULLPTR);    //构造函数
2)、 notchesVisible : bool    访问函数: bool notchesVisible () const;

void setNotchesVisible (bool);

是否显示凹槽(即刻度线),默认为 false(不显示)

3)、 notchSize : const int 访问函数: int notchSize () const;
返回凹槽的大小,凹槽的大小的原理见上图示例,默认为 1。

4)、 notchTarget : qreal 访问函数: qreal notchTarget() const; void setNotchTarget (double);
设置凹槽的像素数,默认为 3.7 像素,为了便于计算,可设置为 1。

5)、 wrapping : bool 访问函数: bool wrapping () const; void setWrapping (bool);
是否开启循环,默认为 false(未开启)

int nMin = 0;
int nMax = 200;
int nSingleStep = 20;
// 微调框
QSpinBox *pSpinBox = new QSpinBox(this);
pSpinBox->move(100, 50);
pSpinBox->setMinimum(nMin);  // 最小值
pSpinBox->setMaximum(nMax);  // 最大值
pSpinBox->setSingleStep(nSingleStep);  // 步长
// 滑动条
QSlider *pSlider = new QSlider(this);
pSlider->move(150, 50);
pSlider->setOrientation(Qt::Horizontal);  // 水平方向
pSlider->setMinimum(nMin);  // 最小值
pSlider->setMaximum(nMax);  // 最大值
pSlider->setSingleStep(nSingleStep);  // 步长		
// 连接信号槽(相互改变)
connect(pSpinBox, SIGNAL(valueChanged(int)), pSlider, SLOT(setValue(int)));
connect(pSlider, SIGNAL(valueChanged(int)), pSpinBox, SLOT(setValue(int)));
pSpinBox->setValue(10);

QSlider *pSlider = new QSlider(this);
pSlider->move(150, 50);
pSlider->setOrientation(Qt::Horizontal);  // 水平方向
pSlider->setMinimum(nMin);  // 最小值
pSlider->setMaximum(nMax);  // 最大值
pSlider->setSingleStep(nSingleStep); // 步长
// pSlider->setTickInterval(40);  // 设置刻度间隔
//描述刻度线的位置
pSlider->setTickPosition(QSlider::TicksAbove);  //QSlider::TicksAbove 刻度在上方

相关文章:

QScrollBar滚动条、QSlider滑块、 QDial表盘

QAbstractSlider 类、 QSCrollBar 类、 QSlider 类 一、 基本原理 1、 QAbstractSlider 继承自 QWidget,该类主要用于提供一个范围内的整数值, 2、 QAbstractSlider 类是 QScrollBar 类(滚动条)、 QSlider 类(滑块)、 QDial 类(表盘)的父类,因…...

Prometheus+Grafana可视化监控【MySQL状态】

文章目录 一、安装Docker二、安装MySQL数据库(Docker容器方式)三、安装Prometheus四、安装Grafana五、Pronetheus和Grafana相关联六、安装mysqld_exporter七、Grafana添加MySQL监控模板 一、安装Docker 注意:我这里使用之前写好脚本进行安装Docker,如果…...

五,编译定制rom并刷机实现硬改(二)

系列文章目录 第一章 安卓aosp源码编译环境搭建 第二章 手机硬件参数介绍和校验算法 第三章 修改安卓aosp代码更改硬件参数 第四章 编译定制rom并刷机实现硬改(一) 第五章 编译定制rom并刷机实现硬改(二) 第六章 不root不magisk不xposed lsposed frida原生修改定位 第七章 安卓…...

Modbus协议详解3:数据帧格式 - RTU帧 ASCII帧的区别

Modbus既然是一种通信协议,那它就应该有规定的通信格式用于在设备之间的指令接收与识别。 本文就着重讲讲Modbus协议的RTU帧和ASCII帧。 Modbus帧在串行链路上的格式如下: 在上图的格式中: 1)地址域:指代的是子节点地址…...

认识数据分析

文章目录 1. 认识数据分析1.1 数据自身的三大属性1.2 建数仓 数据分析的工程技术1.3 数据分析解决问题的原理1.4 数据分析的具体流程1.5 数据的中心化和智能化1.6 数据分析的四种类型和六个方向 1. 认识数据分析 1.1 数据自身的三大属性 客观:用数字衡量和表现一件…...

Learn Prompt-ChatGPT 精选案例:写作博客

在 ChatGPT 的帮助下,文本内容的产出,尤其是撰写博客文章的过程得到了进一步的简化。你可以让 ChatGPT 激发你的灵感,也可以让它美化你的文章内容。 这里我们希望能通过prompt写出一篇以“ChatGPT对社会各行各业的影响”为主题的博客。 本页…...

《确保安全:PostgreSQL安全配置与最佳实践》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…...

Unity中Shader抓取屏幕并实现扭曲效果

文章目录 前言一、屏幕抓取,在上一篇文章已经写了二、实现抓取后的屏幕扭曲实现思路:1、屏幕扭曲要借助传入 UV 贴图进行扭曲2、传入贴图后在顶点着色器的输入参数处,传入一个 float2 uv : TEXCOORD,用于之后对扭曲贴图进行采样3、…...

深浅拷贝详解

深浅拷贝 经典真题 深拷贝和浅拷贝的区别?如何实现 深拷贝和浅拷贝概念 首先,我们需要明确深拷贝和浅拷贝的概念。 浅拷贝:只是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷…...

@Scheduled 定时任务

Scheduled(cron"30 * * * * ?") 1.cron表达式格式: {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 2.cron表达式各占位符解释: {秒数}{分钟} > 允许值范围: 0~59 ,不允许为空值,若值不合法,调度器将…...

丙烯酸共聚聚氯乙烯树脂

声明 本文是学习GB-T 42790-2023 丙烯酸共聚聚氯乙烯树脂. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了丙烯酸共聚聚氯乙烯树脂的外观、物化性能等技术要求,描述了相应的采样、试验方 法、检验规则、标志、包装、…...

Navicat导入Excel数据顺序变了

项目场景: Navicat导入Excel数据 问题描述 从Excel表格中导入数据到数据库中。但是,在导入的过程中,我们常会发现数据顺序出现了问题,导致数据错位,给数据的处理带来了极大的麻烦。 原因分析: 这个问题的…...

uni-app的生命周期

uni-app的生命周期包括应用生命周期和页面生命周期。 应用生命周期涵盖了整个uni-app应用的启动、运行和销毁过程,主要包括以下几个生命周期函数: onLaunch:应用初始化时触发,只触发一次。onShow:应用启动或从后台进…...

Vulnhub实战-DC9

前言 本次的实验靶场是Vulnhub上面的DC-9,其中的渗透测试过程比较多,最终的目的是要找到其中的flag。 一、信息收集 对目标网络进行扫描 arp-scan -l 对目标进行端口扫描 nmap -sC -sV -oA dc-9 192.168.1.131 扫描出目标开放了22和80两个端口&a…...

软件设计模式系列之七——原型模式

1 模式的定义 原型模式(Prototype Pattern)是一种创建型设计模式,其主要目的是通过复制现有对象来创建新对象,而不是使用构造函数。原型模式将对象的创建委托给原型对象,通过克隆(复制)来生成新…...

PMP考试注意事项有哪些?

1. PMI明确规定:不允许考生使用自带文具,包括自带的笔、削笔刀、橡皮、笔袋、计算器和草稿纸等。 2. 本次考试考场内为每位考生配备2B铅笔、橡皮、计算器(若有需要)和草稿纸。如文具有缺损或考试过程中如需更换铅芯等,请向监考老师举手示意。…...

chartgpt+midjourney

chatGPT程序化生成故事 英文版脚本步骤 步骤一:在chatgpt中输入以下脚本,,标红为可变的文字,输入你想要的,目前是科幻,即科幻故事,你可以改为 fairy-tale,则写的是童话故事&#x…...

【SpringMVC】自定义注解

【SpringMVC】自定义注解 前言1. 什么是注解?2. 注解的用处3. 注解的原理1.1. Override1.2. SuppressWarnings 2. JDK元注解2.1. Retention2.2. Target2.3. Inherited2.4. Documented 3. 自定义注解3.1. 自定义注解的分类注解类 结语 自定义注解及其应用 前言 在J…...

【李沐深度学习笔记】数据操作实现

课程地址 数据操作实现p2 数据操作 首先导入PyTorch包(import torch),虽然叫PyTorch,但实际上要导入torch。 import torch张量 张量表示的是一个数值组成的数组,这个数组可以有很多个维度。 # 生成0-11的顺序序列构成的一维…...

【深度学习-注意力机制attention 在seq2seq中应用】

注意力机制 为什么需要注意力机制attention机制的架构总体设计一、attention本身实现评分函数 attention在网络模型的应用-Bahdanau 注意力加性注意力代码实现 为什么需要注意力机制 这是一个普通的seq2seq结构,用以实现机器对话,Encoder需要把一个输入的…...

接口测试中缓存处理策略

在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...