Qt常用控件(四)

一、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);
}

运行代码:

相关推荐
cen__y9 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
社交怪人9 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生10 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS10 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣10 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Xin_ye1008610 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
AI科技星11 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
审判长烧鸡11 小时前
【Go工具】go-playground是什么组织?官方的?
开发语言·安全·go
kkeeper~11 小时前
0基础C语言积跬步之字符函数与字符串函数(上)
c语言·开发语言