Date Edit & Time Edit
使⽤ QDateEdit 作为⽇期的微调框.
使⽤ QTimeEdit 作为时间的微调框
使⽤ QDateTimeEdit 作为时间⽇期的微调框
这⼏个控件⽤法⾮常相似,我们以 QDateTimeEdit 为例进⾏介绍.
QDateTimeEdit 核⼼属性
属性说明dateTime时间⽇期的值.形如 2000/1/1 0:00:00date单纯⽇期的值.形如 2001/1/1time单纯时间的值.形如 0:00:00displayFormat时间⽇期格式.形如 yyyy/M/d H:mm
• y 表⽰年份
• M 表⽰⽉份
• d 表⽰⽇期
• H 表⽰⼩时
• m 表⽰分钟
• s 表⽰秒
注意:这⾥的格式化符号的含义,不要记忆.不同语⾔/库的设定规则
是存在差异的.⼀定是⽤的时间再去查.minimumDateTime最⼩时间⽇期maximumDateTime最⼤时间⽇期timeSpec• Qt: ocalTime :显⽰本地时间。
• Qt::UTC :显⽰协调世界时(UTC)。
• Qt::OffsetFromUTC :显⽰相对于UTC的偏移量(时差). 关于本地时间(LocalTime)和协调世界时(UTC)
UTC时间是⼀个基于原⼦钟的标准时间.不受地球的⾃转周期影响.和格林威治时间(GMT)是⾮常接近的.科学家会通过精密的装备来丈量并维护.
咱们的盘算机内部使⽤的时间就是基于UTC时间.
本地时间则是基于不同的时区,对UTC时间做出了⼀些调整.⽐如咱们使⽤的北京时间,位于"东⼋区",就需要在UTC时间基础上+8个⼩时的时差
核⼼信号
信号说明dateChanged(QDate)⽇期改变时触发.timeChanged(QTime)时间改变时触发.dateTimeChanged(QDateTi
me)时间⽇期恣意⼀个改变时触发. 代码⽰例:实现⽇期盘算器
1)在界⾯上创建两个 QDateTimeEdit 和⼀个按钮,⼀个label
QDateTimeEdit 的 objectName 为 dateTimeEdit_old 和 dateTimeEdit_new
2)编写盘算按钮的slot函数
- 使⽤ daysTo 函数可以盘算两个⽇期的天数.
- 使⽤ secsTo 函数可以盘算两个时间的秒数.
- 通过 (秒数 / 3600) 换算成⼩时数,再余上24得到零⼏个⼩时.
- 使⽤ QString::number 把整数转成 QString 进⾏拼接.
- void Widget::on_pushButton_clicked()
- {
- //获取到两个输入框的时间
- QDateTime timeOld = ui->dateTimeEdit->dateTime();
- QDateTime timeNew = ui->dateTimeEdit_2->dateTime();
- qDebug() << timeOld << timeNew;
- }
复制代码
- //计算日期的差值
- int days = timeOld.daysTo(timeNew);
- qDebug() << days;
复制代码
- //计算日期的差值
- int days = timeOld.daysTo(timeNew);
- int seconds = timeOld.secsTo(timeNew);
- //把秒数换算成小时
- int hours = (seconds / 3600) % 24;
- qDebug() << days << hours;
复制代码
- void Widget::on_pushButton_clicked()
- {
- //获取到两个输入框的时间
- QDateTime timeOld = ui->dateTimeEdit->dateTime();
- QDateTime timeNew = ui->dateTimeEdit_2->dateTime();
- qDebug() << timeOld << timeNew;
- //计算日期的差值
- int days = timeOld.daysTo(timeNew);
- int seconds = timeOld.secsTo(timeNew);
- //把秒数换算成小时
- int hours = (seconds / 3600) % 24;
- //把结果放到label中
- ui->label->setText(QString("时间持续了 ") + QString::number(days) + QString(" 天零 ") +
- QString::number(hours) + QString(" 小时"));
- }
复制代码
有bug,应该是7小时
- void Widget::on_pushButton_clicked()
- {
- //获取到两个输入框的时间
- QDateTime timeOld = ui->dateTimeEdit->dateTime();
- QDateTime timeNew = ui->dateTimeEdit_2->dateTime();
- qDebug() << timeOld << timeNew;
- //计算日期的差值
- //int days = timeOld.daysTo(timeNew);
- int seconds = timeOld.secsTo(timeNew);
- //把秒数换算成小时
- int hours = (seconds / 3600) % 24;
- int days = (seconds / 3600) / 24;
- //把结果放到label中
- ui->label->setText(QString("时间持续了 ") + QString::number(days) + QString(" 天零 ") +
- QString::number(hours) + QString(" 小时"));
- }
复制代码 如果当前得到的小时数不足24,
由于此处是“整数除法",就会舍弃掉小数点后的内容得到的结果就是0了.
Dial
使⽤ QDial 表⽰⼀个旋钮.
有些程序,通过⿏标拖动旋钮旋转,即可完成⼀些相干的设置.
核⼼属性
属性说明value持有的数值.minimum最⼩值maximum最⼤值singleStep按下⽅向键的时间改变的步⻓.pageStep按下pageUp/pageDown的时间改变的步⻓.sliderPosition界⾯上旋钮显⽰的初始位置tracking外观是否会跟踪数值变化.
默认值为true.⼀般不需要修改.wrapping是否允许循环调整.
即数值如果凌驾最⼤值,是否允许回到最⼩值.
(调整过程可否"套圈")notchesVisible是否显⽰刻度线notchTarget刻度线之间的相对位置.
数字越⼤,刻度线越希奇. 核⼼信号
属性说明valueChanged(int)数值改变时触发rangeChanged(int, int)范围变化时触发 代码⽰例:调整窗⼝透明度
1)在界⾯上创建⼀个旋钮和⼀个label
初始值设置
或者用代码初始化
- Widget::Widget(QWidget *parent)
- : QWidget(parent)
- , ui(new Ui::Widget)
- {
- ui->setupUi(this);
- // 设置可以循环旋转
- ui->dial->setWrapping(true);
- // 设置刻度线可⻅
- ui->dial->setNotchesVisible(true);
- // 设置最⼤值为
- ui->dial->setMaximum(100);
- // 设置最⼩值为
- ui->dial->setMinimum(0);
- // 设置初始值为
- ui->dial->setValue(100);
- }
复制代码 3)编写widget.cpp,设置旋钮的 valueChanged slot函数
- void Widget::on_dial_valueChanged(int value)
- {
- qDebug() << value;
- ui->label->setText(QString("当前不透明度为: ") + QString::number(value));
- this->setWindowOpacity((double)value / 100);
- }
复制代码
Slider
使⽤ QSlider 表⽰⼀个滑动条
QSlider 和 QDial 都是继续⾃ QAbstractSlider ,因此⽤法上基本相同.
核⼼属性
属性说明value持有的数值.minimum最⼩值maximum最⼤值singleStep按下⽅向键的时间改变的步⻓.pageStep按下pageUp/pageDown的时间改变的步⻓.sliderPosition滑动条显⽰的初始位置tracking外观是否会跟踪数值变化.
默认值为true.⼀般不需要修改.orientation滑动条的⽅向是⽔平还是垂直invertedAppearance是否要翻转滑动条的⽅向tickPosition刻度的位置.tickInterval刻度的密集程度. 核⼼信号
属性说明valueChanged(int)数值改变时触发rangeChanged(int, int)范围变化时触发 代码⽰例:调整窗⼝⼤⼩
1)在界⾯上创建两个滑动条,分别是⽔平和垂直滑动条.
objectName 分别为 horizontalSlider 和 verticalSlider
2)编写代码初始化滑动条
- #include "widget.h"
- #include "ui_widget.h"
-
- Widget::Widget(QWidget *parent)
- : QWidget(parent)
- , ui(new Ui::Widget)
- {
- ui->setupUi(this);
-
- ui->horizontalSlider->setMinimum(100);
- ui->horizontalSlider->setMaximum(2000);
- ui->horizontalSlider->setValue(800);
- ui->horizontalSlider->setSingleStep(50);
-
- ui->verticalSlider->setMinimum(100);
- ui->verticalSlider->setMaximum(1500);
- ui->verticalSlider->setValue(600);
- ui->verticalSlider->setSingleStep(50);
- // 翻转朝向, 默认滑块从下向上增⻓, 改成从上往下增⻓.
- ui->verticalSlider->setInvertedAppearance(true);
- }
复制代码 3)编写滑动条的 valueChanged slot函数
- void Widget::on_horizontalSlider_valueChanged(int value)
- {
- const QRect& rect = this->geometry();
- this->setGeometry(rect.x(), rect.y(), value, rect.height());
- }
-
- void Widget::on_verticalSlider_valueChanged(int value)
- {
- const QRect& rect = this->geometry();
- this->setGeometry(rect.x(), rect.y(), rect.width(), value);
- }
复制代码 4)执⾏程序,可以看到调整滑动条,窗⼝⼤⼩就会随之改变.
代码⽰例:通过⾃界说快捷键调整滑动条位置
设置-减⼩value,设置=增加value.
默认环境下滑动条可以通过⽅向键或者pageUp/pageDown调整⼤⼩.
1)在界⾯上创建滑动条和label
2)编写初始化代码
- #include "widget.h"
- #include "ui_widget.h"
- #include <QShortcut>
-
- Widget::Widget(QWidget *parent)
- : QWidget(parent)
- , ui(new Ui::Widget)
- {
- ui->setupUi(this);
-
- ui->label->setText("");
- ui->horizontalSlider->setMinimum(0);
- ui->horizontalSlider->setMaximum(100);
- ui->horizontalSlider->setSingleStep(10);
- ui->horizontalSlider->setValue(0);
- }
复制代码 3)创建 valueChanged 的slot函数
- void Widget::on_horizontalSlider_valueChanged(int value)
- {
- ui->label->setText("当前的值为: " + QString::number(value));
- }
复制代码 4)修改widget.cpp构造函数,增加速捷键
- 使⽤ QShortCut 类设置快捷键.
- 快捷键触发时,会发出 QShortcut::activated 信号,我们连接到⾃⼰写的slot函数.
- //使用快捷键,需要QShortcut类
- //需要两个快捷键,-用于减少,=用于增加
- QShortcut* shortCut1 = new QShortcut(this);
- shortCut1->setKey(QKeySequence("-"));
-
- QShortcut* shortCut2 = new QShortcut(this);
- shortCut2->setKey(QKeySequence("="));
-
- //使用信号槽感知到快捷键被按下
- connect(shortCut1, &QShortcut::activated, this, &Widget::subValue);
- connect(shortCut2, &QShortcut::activated, this, &Widget::addValue);
复制代码 5)编写⾃界说slot函数
- void Widget::subValue()
- {
- //获取当前的值
- int value = ui->horizontalSlider->value();
- if (value <= ui->horizontalSlider->minimum()) {
- return;
- }
- ui->horizontalSlider->setValue(value - 5);
- }
-
- void Widget::addValue()
- {
- //获取当前的值
- int value = ui->horizontalSlider->value();
- if (value >= ui->horizontalSlider->maximum()) {
- return;
- }
- ui->horizontalSlider->setValue(value + 5);
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |