欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > [Qt]常用控件介绍-输入类控件-QSpinBox、DateTimeEdit、Dial、Silder控件

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

2025/1/18 23:16:43 来源:https://blog.csdn.net/m0_74207969/article/details/145136729  浏览:    关键词:[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);//设置初始值为100ui->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);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com