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

[Qt]常用控件介绍-输入类控件-QSpinBox、DateTimeEdit、Dial、Silder控件

目录

1.Spin Box控件

属性

核心信号

Demo:点餐小程序

2.DateEdit & TimeEdit & DateTimeEdit

属性

核心信号

UTC协调世界时

Demo:计算两个日期的差值

3.Dial控件

属性

核心信号

Demo:旋钮控制界面的透明度

4.Silder控件

属性

核心信号

Demo:滑动条调整窗口大小-绑定快捷键


1.Spin Box控件

        QSpinBox和QDoubleSpinBox都是一个带有按钮的输入框,也可以说是微调框,可以输入的整数或者浮点数,并使用按钮来调整数值的大小。

属性
属性说明
value存储的数值
singleStep每次调整的数据变化值
displayInteger数字的进制形式(二进制数据、十进制数据等)
minimum最小值
maximum最大值
suffix后缀(例如数据为第n个,那么这个后缀就是”个“)
prefix前缀
wrapping是否允许换行
frame是否带边框
alignment文字对齐方式
readOnly是否允许修改
buttonSymbol

按钮上的图标

UpDownArrows上下箭头形式

PlusMinus加减号形式

NoBUttons没有按钮

accelerated按下按钮时是否快速调整模式
correctionMode

输入的时候有错误修正的修正方案

QAbstractSpinBox::CorrectToPreviousValue如果用户输入了一个无效的值,那么SpinBox会恢复为上一个有效值

QAbstractSpinBox::CorrectToNearestValue输入错误的时候SpinBox会恢复为最接近的有效值

keyboardTrack

是否开启键盘跟踪

开启的话,每次输入一个数字,都会触发一次下面的两个信号。

如果不开启的话,只有最终按下enter或输入框失去焦点的时候,才会触发下面的两个信号

核心信号
信号说明
textChanged(QString)参数时带有前缀后缀的QString字符串,触发情况是上述所说
valueChanged(int)参数int是value数值
Demo:点餐小程序

//设置为条框的范围

void setRange(int min, int max);

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //编辑下拉框选项内容
    ui->comboBox->addItem("米饭");
    ui->comboBox->addItem("面条");
    ui->comboBox_2->addItem("豆角");
    ui->comboBox_2->addItem("排骨");

    //修改SpinBox的范围属性
    ui->spinBox->setRange(1, 5);
    ui->spinBox_2->setRange(1, 2);
    //设置默认值
    ui->spinBox->setValue(1);
    ui->spinBox_2->setValue(1);
}

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


void Widget::on_pushButton_clicked()
{
    qDebug() << "选中的内容是: "
             << ui->comboBox->currentText() << ":" << ui->spinBox->value()
             << ui->comboBox_2->currentText() << ":" << ui->spinBox_2->value();

}

2.DateEdit & TimeEdit & DateTimeEdit

        这三个控件是基于微调框的,用来调整时间和日期的微调框。这几个控件十分相似,这里我们介绍QDateTimeEdit。

属性
属性说明
dateTime时间日期的值,xx/xx/xx 0:0:0的格式
date日期的值
time时间的值
displayFormat

通过一些特殊大的字符来表述时间日期的格式

例如:yyyy/M/d H:mm

年份为4位数,月份为1位,日期为1位,用/分割,具体什么字母表示什么不用记,因为不同的系统是不一样的。

minimumDateTime最小日期时间
maximumDateTime最大日期时间
timeSpec

Qt::LocalTime显示本地时间

Qt::UTC显示协调世界时

Qt::OffsetFromUTC显示相对对UTC的偏移量

核心信号
信号说明
dateChanged(QDate)日期改变的时候触发

timeChanged(QTime)

时间改变的时候触发
dateTimeChanged(QDateTime)时间或日期任意一个改变的时候触发
UTC协调世界时

        UTC是一个基于原子钟的标准时间,不受地球自转周期的影响,咱们计算机内部使用的时间就是基于UTC时间。而本地时间是基于不同的时区的,每个时区都不一样,我们所在的是东八区,所以要在UTC时间的基础上+8h。

Demo:计算两个日期的差值

// 计算两个日期的天数差值

qint64 daysTo(const QDateTime &) const;

// 计算两个日期的秒数差值 

qint64 secsTo(const QDateTime &) const;

        对于daysTo、secsTo的调用是,传递的参数减去调用的对象。

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

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

void Widget::on_pushButton_clicked()
{
    //首先要获取到两个时间都是什么
    QDateTime timeOld = ui->dateTimeEdit->dateTime();
    QDateTime timeNew = ui->dateTimeEdit_2->dateTime();
    //计算差值
    int days = timeOld.daysTo(timeNew);
    int hours = (timeOld.secsTo(timeNew) / 3600) % 24;
    //转换成字符串
    QString text = QString("时间已经持续了:") + QString::number(days) + QString("天 ")
                + QString::number(hours) + QString("小时");
    ui->label_3->setText(text);
}

3.Dial控件

        表示一个旋钮的控件

属性
属性说明
value持有的数值
minimum最小值
maximum最大值
singleStep按下方向键的时候改变的步长
pageStep按下pageUp/pageDown的时候改变的步长
sliderPosition界面上旋钮显示的初始位置
tracking外观是否会跟踪数值的变化,默认位true,一般不用改变
wrapping是否允许循环调整,数值变为最大值后是否回到最小值
notchesVisible是否显示刻度线
notchTarget刻度线之间的相对位置,数字越大刻度线就月稀疏
核心信号
信号说明
valueChanged(int)数值改变时触发
rangeChanged(int, int)范围变化时触发
Demo:旋钮控制界面的透明度
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置可以循环旋转
    ui->dial->setWrapping(true);
    //设置范围
    ui->dial->setRange(0, 100);
    //设置刻度线可见
    ui->dial->setNotchesVisible(true);
    //设置初始值为100
    ui->dial->setValue(100);
}

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

//旋钮数值发生改变触发的信号对于的槽函数
void Widget::on_dial_valueChanged(int value)
{
    ui->label->setText(QString("当前不透明度为:") + QString::number(value));
    this->setWindowOpacity((double)value / 100);
}

4.Silder控件

        是一个滑动条的控件,QSilder和QDial都是继承于QAbstractSlider,所以用法上看基本一样。

属性
属性说明
value持有的数值
minimum

最小值

maximum最大值
singleStep按下方向键的时候改变的步长
pageStep按下pageUp/pageDown的时候改变的步长
sliderPosition界面上旋钮显示的初始位置
tracking外观是否会跟踪数值的变化,默认位true,一般不用改变
orientation滑动条的方向是水平还是竖直的
invertedAppearance是否要反转滑动条的方向
tickPosition刻度的位置
tickInterval可读的密集程度
核心信号
信号说明
valueChanged(int)数值改变时触发
rangeChanged(int, int)范围变化时触发
Demo:滑动条调整窗口大小-绑定快捷键

        代码的逻辑在于:用户可以手动拉动进度条来触发信号改变窗口的大小,也可以使用绑定好的快捷键,快捷键会绑定槽函数,一旦输入的内容被解析为快捷键就会触发QShortcut中的activated信号,进而触发槽函数,我们在槽函数内在去改变进度条的大小,就又会触发信号,进而改变窗口的大小。

        对于快捷键的设置为什么在QPushButton的时候,不需要创建QShortcut对象,进行信号槽的绑定和实现槽函数呢?因为按钮的快捷键设置是按钮类内部提供的setShortcut函数接口,他内部会帮我们处理上述问题,而且对于按钮的快捷键设置就是触发按钮,所以没有异议可以写死。但是对于进度条他分很多种情况,增加减少,增加多少?减少多少?所以没有提供接口,如果我们需要的话需要自己去实现快捷键的生成和绑定对于的槽函数。

        QShortcut类就是自定义快捷键的类,触发快捷键后,会触发QShortcut中的activated信号。

#include "widget.h"
#include "ui_widget.h"
#include <QShortcut>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置窗口的初始大小
    QRect rect = this->geometry();
    this->setGeometry(rect.x(), rect.y(), 500, 500);
    //设置滑动条的范围和初始值
    ui->horizontalSlider->setRange(200, 2000);
    ui->horizontalSlider->setValue(500);
    //设置步长
    ui->horizontalSlider->setSingleStep(50);

    //创建快捷键对象
    QShortcut* shortCut_up = new QShortcut(this);
    QShortcut* shortCut_down = new QShortcut(this);
    //添加快捷键
    shortCut_up->setKey(QKeySequence("="));
    shortCut_down->setKey(QKeySequence("-"));

    //使用信号槽,感知到快捷键被按下执行槽函数
    connect(shortCut_up, &QShortcut::activated, this, &Widget::addValue);
    connect(shortCut_down, &QShortcut::activated, this, &Widget::subValue);
}

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

void Widget::on_horizontalSlider_valueChanged(int value)
{
    ui->label->setText(QString("当前值为:") + QString::number(value));
    QRect rect = this->geometry();
    this->setGeometry(rect.x(), rect.y(), value, value);
}

//增加函数
void Widget::addValue()
{
    //获取滑动条的value值
    int value = ui->horizontalSlider->value();
    ui->horizontalSlider->setValue(value + 50);
}
//减少函数
void Widget::subValue()
{
    //获取滑动条的value值
    int value = ui->horizontalSlider->value();
    ui->horizontalSlider->setValue(value - 50);
}


http://www.kler.cn/a/504634.html

相关文章:

  • 第十二章:算法与程序设计
  • 关于Profinet 从站转 EtherNet/IP 从站网关详细说明
  • C#,图片分层(Layer Bitmap)绘制,反色、高斯模糊及凹凸贴图等处理的高速算法与源程序
  • FLASK 上传文件
  • 【Rust自学】12.6. 使用TDD(测试驱动开发)开发库功能
  • WPF 如何添加系统托盘
  • C++笔记:打包独立运行的exe(在静态库中使用MFC)
  • 使用yarn命令创建Vue3项目
  • Microsoft Sql Server 2019 触发器
  • 利用 rclone 挂载华为云 OBS 到本地
  • 图-岛屿-dfs
  • 什么是docker?关于docker容器的全面详细介绍
  • Spring MVC流程一张图理解
  • 获取文章列表功能
  • LeetCode热题100-有效的括号【JavaScript讲解】
  • 常见好用的PHP CMS开源系统有哪些?
  • javaEE-网络原理-IP协议
  • 微信小程序实现个人中心页面
  • Ubuntu磁盘空间不足或配置错误时,如何操作扩容?
  • Starrocks 存算分离 VS Trino 性能测试
  • 银河麒麟V10安装第二个nginx服务
  • Unity 自定义批量打包工具
  • TCP、UDP的区别及使用场景
  • 装备制造业:建立项目“四算”管理:以合同为源头,以项目为手段实现合同的测算、预算、核算与决算的管控体系
  • [云讷科技] 用于软件验证的仿真环境
  • flow-matching based TTS : VoiceBox, E2-TTS, maskGCT