【Qt】QDial和QSlider

QDial

QDial类用于创建一个旋转式的圆形控件,通过鼠标点击旋转、方向键或者pageUp和pageDown调整一个值。常用在需要进行连续调整的场景,比如音量控制、亮度控制、透明度调节等

常见属性

|----------------|--------------------------------------------|
| 属性 | 说明 |
| value | 持有的值 |
| minimum | 持有值所能到达的最小值 |
| maximum | 持有值所能到达的最大值 |
| singleStep | 按下一次方向键,持有值改变的步长 |
| pageStep | 按下一次pageUp/pageDown,持有值改变的步长 |
| sliderPosition | 界面上旋钮显示的初始位置 |
| tracking | 外观是否会跟踪数值变化 默认值为true,一般不需要修改 |
| wrapping | 是否允许循环调整 即数值如果超过最大值,是否允许回到最小值 (调整过程能否"套圈") |
| notchesVisible | 是否显示刻度线 |
| notchTarget | 刻度线之间的间隔值 例如设置为5,即相邻刻度线持有值相差5 数字越大,刻度线越稀疏 |

核心信号

|------------------------|---------|
| 信号 | 说明 |
| valueChanged(int) | 数值改变时触发 |
| rangeChanged(int, int) | 范围变化时触发 |

示例:通过旋钮控制窗口的不透明度

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //opacity是一个0~1的浮点数,设置旋钮范围0~100,后续再计算
    ui->dial->setMinimum(0);
    ui->dial->setMaximum(100);
    //设置初始值为100,即完全不透明
    ui->dial->setValue(100);
    //设置方向键步长
    ui->dial->setSingleStep(10);
    //设置pageUp/pageDown步长
    ui->dial->setPageStep(5);
    //设置允许循环调整
    ui->dial->setWrapping(true);
    //设置刻度线可见和刻度线间隔
    ui->dial->setNotchesVisible(true);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_dial_valueChanged(int value)
{
    ui->label->setText("当前旋钮的值:" + QString::number(value));
    this->setWindowOpacity((double)value / 100);
}

QSlider

QSlider类用于创建滑动条控件,允许用户通过拖动滑块来选择一个数值范围内的值。通常用于需要离散或连续数值调整的用户界面,比如音量调节、亮度控制、进度条等

常见属性

|--------------------|--------------------------------------------------------------------------------|
| 属性 | 说明 |
| value | 持有的值 |
| minimum | 持有值所能到达的最小值 |
| maximum | 持有值所能到达的最大值 |
| singleStep | 按下一次方向键,持有值改变的步长 |
| pageStep | 按下一次pageUp/pageDown,持有值改变的步长 |
| sliderPosition | 界面上旋钮显示的初始位置 |
| tracking | 外观是否会跟踪数值变化 默认值为true,一般不需要修改 |
| orientation | 滑动条的方向是水平还是垂直的 * Qt::Orientation::Horizontal 水平 * Qt::Orientation::Vertical 垂直 |
| invertedAppearance | 是否要翻转滑动条的方向 |
| tickPosition | 刻度的位置 |
| tickInterval | 刻度的密集程度 |

核心信号

|------------------------|---------|
| 信号 | 说明 |
| valueChanged(int) | 数值改变时触发 |
| rangeChanged(int, int) | 范围变化时触发 |

需了解的信号

|----------------------|------------------------------------------------------------------------|
| 信号 | 说明 |
| actionTriggered(int) | 数值改变时触发 该信号发出时,Qt在内存中维护的滑动条已经更新,但持有值和界面效果还没有更新 该信号在valueChanged信号发出前发出 |
| sliderMoved(int) | 通过拖拽的方式移动滑动条时触发 |
| sliderPressed() | 滑动条被按下,触发该信号 |
| sliderReleased() | 按下滑动条后松开,触发该信号 |

示例:通过一个水平滑动条和垂直滑动条改变窗口大小

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

#include <QShortcut>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置水平滑动条属性
    ui->horizontalSlider->setMinimum(500);//最小值
    ui->horizontalSlider->setMaximum(2000);//最大值
    ui->horizontalSlider->setValue(800);//初始值
    ui->horizontalSlider->setSingleStep(100);//方向键步长
    //设置垂直滑动条属性
    ui->verticalSlider->setOrientation(Qt::Orientation::Vertical);//设置垂直方向
    ui->verticalSlider->setInvertedAppearance(true);//设置反向,使其从上到下为数值增大
    ui->verticalSlider->setMinimum(500);//最小值
    ui->verticalSlider->setMaximum(1500);//最大值
    ui->verticalSlider->setValue(600);//初始值
    ui->verticalSlider->setSingleStep(100);//方向键步长
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_horizontalSlider_valueChanged(int value)
{
    //获取当前窗口的大小
    QRect rect = this->geometry();
    //宽度改变
    this->setGeometry(rect.x(), rect.y(), value, rect.height());
}

void Widget::on_verticalSlider_valueChanged(int value)
{
    //获取当前窗口的大小
    QRect rect = this->geometry();
    //长度改变
    this->setGeometry(rect.x(), rect.y(), rect.width(), value);
}

QShortcut快捷键

QShortcut类用于创建键盘快捷键,允许用户通过按下指定的键组合来触发特定的操作或功能

QShortcut通过信号和槽机制实现快捷键。QShortcut绑定键盘的一个按键或按键组合,通过连接QShortcut的activated信号和对应槽函数实现快捷键被按下时,相应槽函数触发


示例:基于上述代码,为水平滑动条添加 - 和 + 两个快捷键,加号增加宽度,减号减小宽度

cpp 复制代码
//设置 - 快捷键
QShortcut *shortcurSub = new QShortcut(this);
shortcurSub->setKey(QKeySequence("-"));//绑定-
//连接信号和槽函数
connect(shortcurSub, &QShortcut::activated, this, &Widget::valueSub);
//设置 + 快捷键
QShortcut *shortcurAdd = new QShortcut(this);
shortcurAdd->setKey(QKeySequence("+"));//绑定+
connect(shortcurAdd, &QShortcut::activated, this, &Widget::valueAdd);

void Widget::valueSub()
{
    QRect rect = this->geometry();
    //- 对应的槽函数,减小宽度
    this->setGeometry(rect.x(), rect.y(), rect.width() - 30, rect.height());
}

void Widget::valueAdd()
{
    QRect rect = this->geometry();
    //+ 对应的槽函数,增加宽度
    this->setGeometry(rect.x(), rect.y(), rect.width() + 30, rect.height());
}
相关推荐
冷凝女子3 分钟前
【QT】海康视频及openCv抓拍正脸接口
qt·opencv·音视频·海康
y52364817 分钟前
Javascript监控元素样式变化
开发语言·javascript·ecmascript
IT技术分享社区1 小时前
C#实战:使用腾讯云识别服务轻松提取火车票信息
开发语言·c#·云计算·腾讯云·共识算法
极客代码1 小时前
【Python TensorFlow】入门到精通
开发语言·人工智能·python·深度学习·tensorflow
疯一样的码农1 小时前
Python 正则表达式(RegEx)
开发语言·python·正则表达式
&岁月不待人&1 小时前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin
StayInLove1 小时前
G1垃圾回收器日志详解
java·开发语言
无尽的大道2 小时前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
爱吃生蚝的于勒2 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~2 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio