一、QDateEdit & QTimeEdit
使用 QDateEdit 作为日期的微调框

使用 QTimeEdit 作为时间的微调框

使用 QDateTimeEdit 作为时间日期的微调框

以上三种用法相似,所以我们以QDateTimeEdit举例
| 属性 | 说明 |
|---|---|
| dateTime | 时间日期的值 |
| date | 单纯日期的值 |
| time | 单纯时间的值 |
| displayFormat | 时间日期格式:形如yyyy/M/d H:mm |
| minimumDateTime | 最小时间日期 |
| maximumDateTime | 最大时间日期 |
| timeSpec | Qt::LocalTime :显示本地时间;Qt::UTC :显示协调世界时(UTC);Qt::OffsetFromUTC :显示相对于UTC的偏移量(时差) |
核心信号
| 信号 | 说明 |
|---|---|
| dateChanged(QDate) | 日期改变时触发 |
| timeChanged(QTime) | 时间改变时触发 |
| dateTimeChanged(QDateTime) | 时间日期任意一个改变时触发 |
代码样例(实现日期计算器):
首先,在界面上创建两个QDateTimeEdit、一个按钮和一个label

编写按钮的槽函数
cpp
void Widget::on_pushButton_clicked()
{
//获取两个时间框的时间日期
QDateTime timeOld = ui->dateTimeEdit_old->dateTime();
QDateTime timeNew = ui->dateTimeEdit_new->dateTime();
//计算时间差值
//daysTo可以计算两个日期的天数
int days = timeOld.daysTo(timeNew);
//secsTo可以计算两个日期的秒数
int hours = (timeOld.secsTo(timeNew)/3600) % 24;
//设置label的内容
QString text = QString("两个时间相差:") + QString::number(days)
+ QString("天 零") + QString::number(hours) + QString("个小时");
ui->label->setText(text);
}
运行结果:

二、QDial
使用QDial表示一个旋钮

| 属性 | 说明 |
|---|---|
| value | 持有的数值 |
| minimum | 最小值 |
| maximum | 最大值 |
| singleStep | 按下方向键时改变的步长 |
| pageStep | 按下 pageUp / pageDown 的时候改变的步长 |
| sliderPosition | 界面上旋钮显示的初始位置 |
| tracking | 外观是否会跟踪数值变化,默认值为 true. ⼀般不需要修改 |
| wrapping | 是否允许循环调整.即数值如果超过最大值, 是否允许回到最小值 |
| notchesVisible | 是否显示刻度线 |
| notchTarget | 刻度线之间的相对位置,数字越大, 刻度线越稀疏 |
核心信号
| 信号 | 说明 |
|---|---|
| valueChanged(int) | 数值改变时触发 |
| rangeChanged(int, int) | 范围变化时触发 |
代码样例(调整窗口透明度):
首先,在界面上创建一个旋钮和一个label

编写widget.cpp
cpp
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);
}
编写槽函数
cpp
void Widget::on_dial_valueChanged(int value)
{
ui->label->setText(QString("当前透明度为:") + QString::number(value));
this->setWindowOpacity((double)value / 100);
}
运行结果:

三、QSlider
使用 QSlider 表示⼀个滑动条

| 属性 | 说明 |
|---|---|
| value | 持有的数值 |
| minimum | 最小值 |
| maximum | 最大值 |
| singleStep | 按下方向键改变的步长 |
| pageStep | 按下 pageUp / pageDown 的时候改变的步长 |
| sliderPosition | 滑动条显示的初始位置 |
| tracking | 外观是否会跟踪数值变化,默认值为 true. 一般不需要修改 |
| orientation | 滑动条的方向是水平还是垂直 |
| invertedAppearance | 是否要翻转滑动条的方向 |
| tickPosition | 刻度的位置 |
| tickInterval | 刻度的密集程度 |
核心信号
| 信号 | 说明 |
|---|---|
| valueChanged(int) | 数值改变时触发 |
| rangeChanged(int, int) | 范围变化时触发 |
代码样例(调整窗口的大小):
首先,在界面上创建两个滑条,一个是水平上的,一个是垂直的

编写widget.cpp文件
cpp
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设定最大值最小值
ui->horizontalSlider->setMinimum(500);
ui->horizontalSlider->setMaximum(2000);
//设定一次的改变量
ui->horizontalSlider->setSingleStep(100);
//设定初始值
ui->horizontalSlider->setValue(800);
ui->verticalSlider->setMinimum(500);
ui->verticalSlider->setMaximum(2000);
ui->verticalSlider->setSingleStep(100);
ui->verticalSlider->setValue(100);
}
编写槽函数
cpp
void Widget::on_horizontalSlider_valueChanged(int value)
{
QRect rect = this->geometry();
this->setGeometry(rect.x(), rect.y(), value, rect.height());
qDebug() << value;
}
void Widget::on_verticalSlider_valueChanged(int value)
{
QRect rect = this->geometry();
this->setGeometry(rect.x(), rect.y(), rect.width(), value);
qDebug() << value;
}
运行代码:

代码样例(通过自定义快捷键调整滑动条位置):
设置 - 减小 value, 设置 = 增加 value(设置 = 是因为跟 + 其实是一样的按键)
首先,在界面上创建一个滑动条和一个lable

编写widget.cpp文件
cpp
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(5);
ui->horizontalSlider->setValue(10);
}
编写槽函数
cpp
void Widget::on_horizontalSlider_valueChanged(int value)
{
ui->label->setText(QString::number(value));
}
对widget.cpp文件进行修改
cpp
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(5);
ui->horizontalSlider->setValue(10);
//设置快捷键
QShortcut* shortCut1 = new QShortcut(this);
shortCut1->setKey(QKeySequence("-"));
connect(shortCut1, &QShortcut::activated, this, &Widget::subValue);
QShortcut* shortCut2 = new QShortcut(this);
shortCut2->setKey(QKeySequence("="));
connect(shortCut2, &QShortcut::activated, this, &Widget::addValue);
}
编写自定义槽函数
cpp
//编写自定义槽函数
void Widget::subValue()
{
int value = ui->horizontalSlider->value();
ui->horizontalSlider->setValue(value - 10);
}
void Widget::addValue()
{
int value = ui->horizontalSlider->value();
ui->horizontalSlider->setValue(value + 10);
}
运行代码:
