Qt 5.14.2 学习记录 —— 십삼 QComboBox、QSpinBox、QDateTimeEdit、QDial、QSlider

文章目录


1、QComboBox

下拉框


信号

写程序来查看各个功能

cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->comboBox->addItem("麦辣鸡腿堡");
    ui->comboBox->addItem("巨无霸");
    ui->comboBox->addItem("培根蔬萃双层牛堡");

    ui->comboBox_2->addItem("薯条");
    ui->comboBox_2->addItem("麦乐鸡块");
    ui->comboBox_2->addItem("麦辣鸡翅");

    ui->comboBox_3->addItem("可乐");
    ui->comboBox_3->addItem("雪碧");
}

void Widget::on_pushButton_clicked()
{
    qDebug() << ui->comboBox->currentText() << ", " << ui->comboBox_2->currentText() << ", " << ui->comboBox_3->currentText();
}

右击下拉框,编辑项目也可以添加内容。

另一个例子,通过文件/网络来添加下拉框内容

cpp 复制代码
#include <QDebug>
#include <fstream>

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

    std::ifstream file("E:/test.txt");
    if (!file.is_open())
    {
        qDebug() << "文件打开失败";
        return ;
    }
    std::string line;
    while (std::getline(file, line))
    {
        // 括号中把std::string 改为 QString
        // QString 改为 std::string 是 .toStdString()
        ui->comboBox->addItem(QString::fromStdString(line));
    }
    file.close();
}

2、QSpinBox

带有按钮的输入框,微调框。



在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5c9560d549594a12b801829e81986137.png)

cpp 复制代码
#include <QDebug>

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

    ui->comboBox->addItem("麦辣鸡腿堡");
    ui->comboBox->addItem("巨无霸");
    ui->comboBox->addItem("培根蔬萃双层牛堡");

    ui->comboBox_2->addItem("薯条");
    ui->comboBox_2->addItem("麦乐鸡块");
    ui->comboBox_2->addItem("麦辣鸡翅");

    ui->comboBox_3->addItem("可乐");
    ui->comboBox_3->addItem("雪碧");

    // 限制一下可选的量
    ui->spinBox->setRange(1, 5);
    ui->spinBox_2->setRange(1, 5);
    ui->spinBox_3->setRange(1, 5);

    ui->spinBox->setValue(1);
    ui->spinBox_2->setValue(1);
    ui->spinBox_3->setValue(1);
}

void Widget::on_pushButton_clicked()
{
    qDebug() << "当前订单: "
             << ui->comboBox->currentText() << ": " << ui->spinBox->value()
             << ui->comboBox_2->currentText() << ": " << ui->spinBox_2->value()
             << ui->comboBox_3->currentText() << ": " << ui->spinBox_3->value();
}

3、QDateTimeEdit


写一个时间计算器

cpp 复制代码
void Widget::on_pushButton_clicked()
{
    QDateTime timeOld = ui->dateTimeEdit->dateTime();
    QDateTime timeNew = ui->dateTimeEdit_2->dateTime();

    // QDateTime中, daysTo计算两个时间的日期的差值, secsTo计算两个时间的秒数的差值
    int days = timeOld.daysTo(timeNew);
    int seconds = timeOld.secsTo(timeNew);
    
    int hours = (seconds / 3600) % 24; // 秒转为小时
    ui->label->setText(QString("相差 ") + QString::number(days) + QString(" 天 ") + QString::number(hours) + QString(" 小时"));
}

也可以自己计算天数

cpp 复制代码
void Widget::on_pushButton_clicked()
{
    QDateTime timeO ld = ui->dateTimeEdit->dateTime();
    QDateTime timeNew = ui->dateTimeEdit_2->dateTime();

    // QDateTime中, daysTo计算两个时间的日期的差值, secsTo计算两个时间的秒数的差值
    //int days = timeOld.daysTo(timeNew);
    int seconds = timeOld.secsTo(timeNew);
    
    int days = (seconds / 3600) / 24;
    int hours = (seconds / 3600) % 24; // 秒转为小时
    ui->label->setText(QString("相差 ") + QString::number(days) + QString(" 天 ") + QString::number(hours) + QString(" 小时"));
}

4、QDial

表示旋钮




通过旋钮控制窗口的不透明度

cpp 复制代码
void Widget::on_dial_valueChanged(int value)
{
    // 1完全不透明, 0完全透明, 是一个小数
    this->setWindowOpacity((double)value / 100);
}

5、QSlider

滑动条


信号

写一个水平,一个垂直进度条,用方向键可以控制。

cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->horizontalSlider->setMinimum(100);
    ui->horizontalSlider->setMaximum(2100);
    ui->horizontalSlider->setValue(400);
    ui->horizontalSlider->setSingleStep(50);

    ui->verticalSlider->setMinimum(100);
    ui->verticalSlider->setMaximum(2100);
    ui->verticalSlider->setValue(700);
    ui->verticalSlider->setSingleStep(50);
}

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

用快捷键来操作滑动条

cpp 复制代码
# include <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);

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

结束。

相关推荐
一隅论数智13 小时前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
小羊没烦恼!14 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
XiHongShi201614 小时前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本14 小时前
离散数学第六课
学习·离散数学
伞伞悦读15 小时前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
C语言小火车15 小时前
C/C++ 为什么需要编译器?
开发语言·c++
AI职业加油站16 小时前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光16 小时前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
奇思妙想聪明勤奋的小羊16 小时前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型