qt初入门7:进度条,定时器,时间控件练习

news2025/4/7 7:59:16

参考课本demo,空闲时间练习一下进度条,定时器,日期相关控件和使用。

1:demo运行结果

在这里插入图片描述

2:进度条控件梳理

进度条显示控件实际上是QProgressBar, 显示的进度可以通过代码控制,也可以通过其他控件上获取到的值进行控制。

除了正常设置相关值以外,在ui界面可以熟悉相关选项观察显示效果,以及查看手册和成员函数了解接口。

void Dialog::init()
{
    ui->sb_h_control->setValue(24);
    ui->sl_h_control->setValue(24);
    ui->sl_x_control->setValue(24);
    ui->dial_control->setValue(24);

    //研究一下控件反方向
    ui->sb_x_control->setToolTip("控件提示");
    //设置范围
    ui->sb_x_control->setRange(0,100);
    ui->sb_x_control->setSliderPosition(100);
    ui->sb_x_control->setValue(100-24);

    connect(ui->dial_control, SIGNAL(valueChanged(int)), this, SLOT(do_valueChanged(int)));
    connect(ui->sb_h_control, SIGNAL(valueChanged(int)), this, SLOT(do_valueChanged(int)));
    connect(ui->sl_h_control, SIGNAL(valueChanged(int)), this, SLOT(do_valueChanged(int)));
    connect(ui->sl_x_control, SIGNAL(valueChanged(int)), this, SLOT(do_valueChanged(int)));

    ui->cb_textVisable->setCheckState(Qt::Checked);
    ui->rb_percentage->setChecked(true);
    ui->pb_display->setValue(24);
}

//槽函数处理进度条控件 感觉这个用的比较多
void Dialog::do_valueChanged(int data)
{
    ui->pb_display->setValue(data);
}

void Dialog::on_sb_x_control_valueChanged(int value)
{
    ui->pb_display->setValue(100-value);
}

void Dialog::on_cb_textVisable_clicked(bool checked)
{
    ui->pb_display->setTextVisible(checked);
}

void Dialog::on_cb_inverted_clicked(bool checked)
{
    ui->pb_display->setInvertedAppearance(checked);
}

void Dialog::on_rb_percentage_clicked()
{
    ui->pb_display->setFormat("%p%");
}

void Dialog::on_rb_number_clicked()
{
    ui->pb_display->setFormat("%v");
}

3:定时器练习,以及lcd控件

单次定时器和循环定时器,QTimer类,以及计时QElapsedTimer类。

QTimer *m_timer;
QElapsedTimer m_counter; //计算耗时
void Dialog::lcd_display(bool isInit)
{
    if(isInit)
    {
        ui->lcd_hour->display(0);
        ui->lcd_minute->display(0);
        ui->lcd_second->display(0);
        return;
    }
    QTime  cur_timer = QTime::currentTime();
    ui->lcd_hour->display(cur_timer.hour());
    ui->lcd_minute->display(cur_timer.minute());
    ui->lcd_second->display(cur_timer.second());
}

void Dialog::initTimer()
{
    ui->sb_cycle->setRange(0,20000);
    ui->sb_cycle->setValue(1000);
    ui->sb_cycle->setSuffix(" ms");

    ui->rb_lx_timer->setChecked(true);
    ui->pbn_stop->setEnabled(false);

    lcd_display(true);

    QStringList list ;
    list<<"毫秒级精度"<<"精度的5%"<<"秒精度(粗粒度)";
    ui->cbb_precision->addItems(list);
    ui->cbb_precision->setEditable(false);
    ui->cbb_precision->setCurrentIndex(0);

    m_timer = new QTimer;
    m_timer->stop();
    m_timer->setTimerType(Qt::CoarseTimer); //设置默认精度
    connect(m_timer, SIGNAL(timeout()),this,SLOT(do_timer_timeout()));

    m_cycle_count=0;
}

//启动定时器   根据精度选择  单次/重复进行定时器的初始化
void Dialog::on_pbn_start_clicked()
{
    bool is_once_timer = false;
    is_once_timer = ui->rb_once_timer->isChecked()?true:false;

    int time_cycle = ui->sb_cycle->value();
    int time_index = ui->cbb_precision->currentIndex();
    Qt::TimerType time_type = Qt::PreciseTimer;
    switch(time_index)
    {
        case 0: time_type = Qt::PreciseTimer; break;    //比较高的精度
        case 1: time_type = Qt::CoarseTimer; break;     //相对较低的精度
        case 2: time_type = Qt::VeryCoarseTimer; break; //精度比较低
        default: time_type = Qt::PreciseTimer; break;
    }
    lcd_display();

    m_counter.start();
    if(is_once_timer) //创建单次定时器 执行一次
    {
        //创建单次定时器 time_cycle ms之后执行一次  PreciseTimer比较高的精度
//        QTimer::singleShot(time_cycle,Qt::PreciseTimer,this,&Dialog::do_timer_timeout);
        QTimer::singleShot(time_cycle,time_type, [&](){
            int tmMsec = m_counter.elapsed();
            ui->le_timer_display->setText("单次定时器 消耗时间:"+QString::number(tmMsec)+" ms");
            ui->pbn_start->setEnabled(true);
        });

        ui->pbn_start->setEnabled(false);
        //也可以用QTimer 类对象 设置单次属性
        m_timer->setSingleShot(true);
        m_timer->start();
    }

    if(!is_once_timer)//创建定时器 一直执行
    {
        ui->pbn_start->setEnabled(false);
        ui->pbn_stop->setEnabled(true);

        m_timer->setTimerType(time_type);//设置定时器的周期和属性
        m_timer->setInterval(time_cycle);
        m_timer->start();
    }
}

void Dialog::on_pbn_stop_clicked()
{
    m_timer->stop();

    int tmMsec=m_counter.elapsed();  //流逝的时间:毫秒
    int ms= tmMsec % 1000;  //余数毫秒
    int sec=tmMsec/1000;    //整秒

    QString str=QString("流逝的时间:%1秒,%2毫秒").arg(sec).arg(ms,3,10,QChar('0'));
    ui->le_timer_display->setText("执行了"+QString::number(m_cycle_count)+"次,"+str);

    m_cycle_count = 0;
    ui->pbn_start->setEnabled(true);
    ui->pbn_stop->setEnabled(false);
}

//这里是定时器任务的执行 对应lcd显示的触发
void Dialog::do_timer_timeout()
{
    ++m_cycle_count;
    QApplication::beep();   //使系统的蜂鸣器发声 1s

    //获取当前的时间 显示再lcd上
    lcd_display();
}

3:时间控件练习

主要QDate QTime QDateTime获取时间,

下拉框选择日期需要设置setCalendarPopup

以及时间和QString的相互转换。

//获取当前时间 下拉框有日历显示控件 如果要完美,感觉还得自定义控件
void Dialog::on_pbn_getcurtime_clicked()
{
    //设置支持下拉框选择日历 下拉就可以直接选择日期
    ui->dde_cal->setCalendarPopup(true);
    ui->dde_datetime->setCalendarPopup(true);

    //QDate  QTime  QDateTime
    QDateTime cur_time = QDateTime::currentDateTime();
    ui->dde_datetime->setDateTime(cur_time);
    ui->dde_cal->setDate(cur_time.date());
    ui->dde_time->setTime(cur_time.time());

    qint64 MS = cur_time.toSecsSinceEpoch();
//    ui->le_ms_display->setText("当前时间"+QString::number(MS)+"s");
    cur_time.setSecsSinceEpoch(MS+2);//加2s
    ui->le_ms_display->setText("当前时间"+QString::number(MS)+"s"+" 2s后:"+QString::number(cur_time.toSecsSinceEpoch()));

    ui->pte_display->setPlainText("当前日期时间"+cur_time.toString("yyyy-MM-dd hh:mm:ss.zzz"));
    ui->pte_display->appendPlainText("当前日期"+cur_time.date().toString("yyyy-MM-dd"));
    ui->pte_display->appendPlainText("当前时间"+cur_time.time().toString("hh:mm:ss.zzz"));

    //这里需要严格匹配格式
    QString qstr = cur_time.toString("yyyy-MM-dd hh:mm:ss.zzz");
    QString qstr1 = qstr.trimmed();
    QDateTime qstr_date = QDateTime::fromString(qstr1,"yyyy-MM-dd hh:mm:ss.zzz");
    ui->pte_display->appendPlainText("字符串转日期:"+qstr_date.toString("yyyy-MM-dd hh:mm:ss"));
}
//TODO 这里可以增加一个控件选择时间!

void Dialog::on_dde_datetime_dateTimeChanged(const QDateTime &dateTime)
{
    ui->pte_display->setPlainText("选择的日期:"+dateTime.toString("yyyy-MM-dd hh:mm:ss"));
}

demo代码放在码云(qt_test_datatime):qt课本demo练习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1419006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android SystemUI 介绍

目录 一、什么是SystemUI 二、SystemUI应用源码 三、学习 SystemUI 的核心组件 四、修改状态与导航栏测试 本篇文章&#xff0c;主要科普的是Android SystemUI &#xff0c; 下一篇文章我们将介绍如何把Android SystemUI 应用转成Android Studio 工程项目。 一、什么是Syst…

【K12】运用tk控件演示欧姆定律串联电阻小应用

上述代码是一个基于Python的图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;用于演示欧姆定律。用户可以通过输入电阻值来计算电流&#xff0c;并在图形上显示结果。该程序使用了Tkinter库来创建GUI&#xff0c;matplotlib库来绘制图形&#xff0c;以及numpy库进…

使用git工具向GitHub远程仓库提交代码

注意更新仓库&#xff1a; 远程仓库更新方法&#xff1a; 本地仓库更新方法&#xff1a;在终端进入克隆的文件夹&#xff0c;依次执行如下指令&#xff1a; git config pull.rebase false //使用默认的合并策略 git pull //执行实际的拉取操作以下为常规操作&#xff…

【React教程】(3) React之表单、组件、事件处理详细代码示例

目录 事件处理示例1示例2示例3&#xff08;this 绑定问题&#xff09;示例4&#xff08;传递参数&#xff09;Class 和 Style 表单处理组件组件规则注意事项函数式组件&#xff08;无状态&#xff09;类方式组件&#xff08;有状态&#xff09;组件传值 Propsthis.props.childr…

bert提取词向量比较两文本相似度

使用 bert-base-chinese 预训练模型做词嵌入&#xff08;文本转向量&#xff09; 模型下载&#xff1a;bert预训练模型下载-CSDN博客 参考文章&#xff1a;使用bert提取词向量 下面这段代码是一个传入句子转为词向量的函数 from transformers import BertTokenizer, BertMod…

神经网络建立(结果可变)最小神经元

目录 介绍&#xff1a; 初始化&#xff1a; 建模: 预测&#xff1a; 改变结果&#xff1a; 介绍&#xff1a; 在深度学习中&#xff0c;神经元通常指的是人工神经元&#xff08;或感知器&#xff09;&#xff0c;它是深度神经网络中的基本单元。深度学习的神经元模拟了生…

腾讯发表多模态大模型最新综述,从26个主流大模型看多模态效果提升关键方法

在大规模语言模型&#xff08;LLMs&#xff09;通往通用人工智能&#xff08;AGI&#xff09;的道路中&#xff0c;从传统的单一的“语言模态”扩展到“图像”、“语音”等等的“多模态”必然是大模型进化的必经之路。 在过去的 2023 年&#xff0c;多模态大规模语言模型&…

Java 与 JavaScript的区别

Java 与 JavaScript的区别 Java 与 JavaScript&#xff1a;概述Java的特点JavaScript 的起源JavaScript 的特点Java 与 JavaScript&#xff0c;哪个更好&#xff1f;JavaScript 与 Java 相似吗&#xff1f;Java 与 JavaScript 的区别JavaScript 在服务器端的运行方式是怎样的&a…

arco design table遇到的一些问题

问题1&#xff1a;不知情就成了树形table table中不知道为啥就多了个树形加号在前面&#xff0c;查找问题后发现&#xff0c;是后端返回的数据中有children&#xff0c;框架中默认对这个参数做了树形结构。 解决办法&#xff1a; 当时没找到取消或者修改字段的属性或方法&…

美赛违规被判作弊,注意这几种情况

每年都会有队伍被判为作弊或无效&#xff0c;无非就是买了思路、找了代做或不小心造成的。 下图是2023美赛评奖结果&#xff08;MCM是前三题&#xff0c;ICM是后三题&#xff0c;去年疫情补办了春季赛&#xff09;&#xff0c;可以看到共1264个队被取消评奖资格&#xff08;Di…

扩展学习|一文明晰推荐系统应用开发核心技术发展

文献来源&#xff1a;Lu J, Wu D, Mao M, et al. Recommender system application developments: a survey[J]. Decision support systems, 2015, 74: 12-32. 主题&#xff1a;关于推荐系统应用开发的调查研究 关键词:推荐系统、电子服务个性化、电子商务、电子学习、电子政务 …

STM32学习笔记一——初识STM32

目录 一、什么是ARM 二. Cortex 内核 三.什么是STM32 四.STM32核心板原理图&#xff1a; 五.STM32的内部结构&#xff1a; 六.stm32系统结构简化图 STM32基本原理分析&#xff1a; 七.典型型号——STM32F103ZET6 stm32——32位单片机&#xff08;数据总线是32位的&am…

idea连接docker

idea 插件无法连接docker问题 原文&#xff1a;idea 插件无法连接docker问题 // 修改docker配置 vi /usr/lib/systemd/system/docker.service // 加上该段配置允许任何ip访问 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock // 重启docker即可 systemctl restart dock…

计算机网络·网络层

网络层 网络层提供的两种服务 争论&#xff1a; 网络层应该向运输层提供怎样的服务&#xff1f;面向连接还是无连接&#xff1f; 在计算机通信中&#xff0c;可靠交付应当由谁来负责&#xff1f;是网络还是端系统&#xff1f; 2 种观点&#xff1a; 面向连接的可靠交付。 无连…

PaddleNLP的简单使用

1 介绍 PaddleNLP是一个基于PaddlePaddle深度学习平台的自然语言处理&#xff08;NLP&#xff09;工具库。 它提供了一系列用于文本处理、文本分类、情感分析、文本生成等任务的预训练模型、模型组件和工具函数。 PaddleNLP有统一的应用范式&#xff1a;通过 paddlenlp.Task…

Windows Server 2003 Web服务器搭建

系列文章目录 目录 系列文章目录 前言 一、Web服务器是什么&#xff1f; 二、配置服务器 1.实验环境搭建 2.服务器搭建 1)控制面板中找到增加或删除程序打开 2)点击增加程序 3)安装Web服务器 4)查看安装是否成功 5)打开Internet信息服务(IIS)管理器,进行配置 6)找…

Deepin基本环境查看(七)【任务管理器和进程管理】

Deepin基本环境查看 - 目录Deepin基本环境查看&#xff08;一&#xff09;【基本信息】Deepin基本环境查看&#xff08;二&#xff09;【内存】Deepin基本环境查看&#xff08;三&#xff09;【网络信息】Deepin基本环境查看&#xff08;四&#xff09;【硬盘/分区、文件系统、…

Sqli-labs-master第一关通关攻略

第一关基于错误的字符串/数字型注入 第一关打开&#xff0c;请输入id数值作为参数&#xff0c;那就输呗整个1&#xff0c;2&#xff0c;3看看效果 通过ID数值得变动&#xff0c;页面也随之发生变化&#xff0c;然后就是判断SQL语句是否拼接&#xff0c;是字符型还是数字型 输入…

C++ —— 智能指针

C —— 智能指针 文章目录 C —— 智能指针一、为什么需要使用智能指针&#xff1f;二、内存泄漏什么是内存泄漏&#xff1f;内存泄漏的危害&#xff1f;内存泄漏分类 三、智能指针的使用及原理1. RAII2. 智能指针的原理 三、智能指针的缺陷及其发展3.1 std::auto_ptr3.2 std::…

Spring IoC容器(一)

IoC,Inversion of Control 控制反转&#xff0c;是一个过程。仅通过构造函数、工厂方法或在对象实例化后在对象实例上设置属性来定义其依赖关系。容器负责这些工作&#xff0c;这个过程从本质上来说是bean本身的反向&#xff0c;因此称为反向控制。 1 容器 负责实例化、配置及…