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

参考课本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练习

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法】BFS算法解决多源最短路问题(C++)

文章目录 前言那么什么是单源最短路 / 多源最短路呢&#xff1f;如何解决此类题&#xff1f;解法一解法二对于解法二&#xff0c;如何编写代码&#xff1f; 算法题542.01矩阵1020.飞地的数量1765.地图中的最高点1162.地图分析 前言 此前我们对 单源最短路 问题进行的讲解&…

Linux中并发程序设计(进程的创建和回收、exec函数使用、守护进程创建和使用、GDB的父、子进程代码的调试、线程的创建和参数传递)

进程的创建和回收 进程概念 概念 程序 存放在磁盘上的指令和数据的有序集合&#xff08;文件&#xff09; 静态的 进程 执行一个程序所分配的资源的总称 动态的进程和程序比较 注&#xff1a;进程是存在RAM中&#xff0c;程序是存放在ROM(flash)中的进程内容 BSS段&#xff…

一篇文章搞懂Python的文件读写

目录 一、打开文件 二、读取文件内容 三、写入文件内容 四、追加内容到文件末尾 五、文件路径 六、错误处理 七、关闭文件 八、文件读写的高级功能 总结 在Python中&#xff0c;文件读写是一项常见的操作。通过文件读写&#xff0c;我们可以保存数据&#xff0c;加载数…

算法学习记录:动态规划

前言&#xff1a; 算法学习记录不是算法介绍&#xff0c;本文记录的是从零开始的学习过程&#xff08;见到的例题&#xff0c;代码的理解……&#xff09;&#xff0c;所有内容按学习顺序更新&#xff0c;而且不保证正确&#xff0c;如有错误&#xff0c;请帮助指出。 学习工具…

Find My资讯|苹果Apple Pencil 3将支持Find My定位查找功能

国外科技媒体 9to5Mac 深挖 iOS 17.4 Beta 1 更新代码&#xff0c;发现了 Apple Pencil 3 的踪迹&#xff0c;并显示该手写笔支持 Find My 功能。这就意味着可以和 AirPods 和 AirTags 一样&#xff0c;用户可以通过 Find My 网络&#xff0c;寻找丢失的 Apple Pencil 手写笔。…

Kotlin for loop: in、 until、 step、 downTo

Kotlin for loop: in、 until、 step、 downTo fun loop1() {for (i in 0..5) {print("$i ")}println("\n1-end\n") }fun loop2() {for (i in 0 until 5) {print("$i ")}println("\n2-end\n") }fun loop3() {for (i in 0 until (5)) {…

探索Viper-适用于GoLang的完整配置解决方案

前言 对于现代应用程序&#xff0c;尤其大中型的项目来说&#xff0c;在程序启动和运行时&#xff0c;往往需要传入许多参数来控制程序的行为&#xff0c;我们可以通过命令行参数&#xff0c;环境变量&#xff0c;配置文件等方式来将参数传递给程序。而Viper库为Golang语言开发…

LabVIEW继电器触点接触电阻自动测试

继电器作为工业中的重要组件&#xff0c;其性能直接影响着整个生产线的可靠性和安全性。触点接触电阻是衡量继电器性能的重要参数&#xff0c;传统的测试方法效率低下且成本高昂。为了解决这些问题&#xff0c;采用LabVIEW软件&#xff0c;结合专业的硬件平台&#xff0c;实现了…

备战蓝桥杯----数据结构及STL应用(基础2)

上次我们讲了vector的大致内容&#xff0c;接下来让我们讲一下栈&#xff0c;队列吧&#xff01; 什么是栈呢&#xff1f; 很简单&#xff0c;我们用的羽毛球桶就是&#xff0c;我们取的球&#xff0c;是最后放的&#xff0c;栈是一种先进后出的数据结构。 方法函数 s.push(…

怎样做好Code Review

Code Review方案 定义 Code Review代码评审是指在软件开发过程中&#xff0c;通过对源代码进行系统性检查的过程。通常的目的是查找各种缺陷&#xff0c;包括代码缺陷、功能实现问题、编码合理性、性能优化等&#xff1b;保证软件总体质量和提高开发者自身水平 code review …

SRM是什么意思?SRM供应商管理系统哪个好?

阅读本文&#xff0c;您将了解&#xff1a;一、SRM是什么意思&#xff1b;二、SRM的应用价值&#xff1b;三、SRM供应商管理系统哪个好&#xff1f;推荐在零代码平台自主开发。 在当今快速变化的商业环境中&#xff0c;企业之间的协作和效率至关重要。供应链管理作为企业运营的…

HarmonyOS鸿蒙学习笔记(24)AppScope的icon和UIAblity的icon的区别

在HarmonyOS中有两个配置文件app.json5配置文件和module.json5配置文件&#xff0c;两个配置文件都有icon和label标签&#xff1a; 二者区别如下&#xff1a; app.json5的icon app.json5里面的icon和label:对应的是应用图标和应用标签&#xff0c;应用图标和标签是在设置应用…

HarmonyOS --@state状态装饰器

在声明式UI中&#xff0c;是以状态驱动视图更新。 状态&#xff08;state&#xff09;&#xff1a;指驱动视图更新的数据&#xff08;被装饰器标记的变量&#xff09;。 试图&#xff08;view&#xff09;&#xff1a;基于UI描述渲染得到用户界面 State装饰器标记的变量必须初…

C# Socket 允许控制台应用通过防火墙

需求&#xff1a; 在代码中将exe添加到防火墙规则中&#xff0c;允许Socket通过 添加库引用 效果&#xff1a; 一键三联 若可用记得点赞评论收藏哦&#xff0c;你的支持就是写作的动力。 源地址: https://gist.github.com/cstrahan/513804 调用代码: private static void …

雅特力AT32 Workbench图形化代码生成工具,简化嵌入式开发利器

嵌入式系统应用市场广泛&#xff0c;早已遍及日常生活&#xff0c;随着产品需求复杂度的提升&#xff0c;32位MCU开发难度也随之增加&#xff0c;如何降低开发成本&#xff0c;缩短开发周期&#xff0c;是所有嵌入式开发人员的共同课题。 面对市场竞争日益加剧的情形&#xff…

【Web前端实操17】导航栏效果——滑动门

滑动门 定义: 类似于这种: 滑到导航栏的某一项就会出现相应的画面,里面有对应的画面出现。 箭头图标操作和引用: 像一些图标,如果需要的话,可以找字体图标,比如阿里巴巴矢量图标库:iconfont-阿里巴巴矢量图标库 选择一个——>添加至购物车——>下载代码 因…

实战 | OpenCV+OCR实现弧形文字识别实例(详细步骤 + 源码)

导 读 本文主要介绍基于OpenCV+OCR实现弧形文字识别实例,并给详细步骤和代码。源码在文末。 背景介绍 测试图如下,目标是正确识别图中的字符。图片来源: https://www.51halcon.com/forum.php?mod=viewthread&tid=6712 同样,论坛中已经给出了Halcon实现代码,…

Linux文件管理(下)

上上篇介绍了Linux文件管理的上部分内容&#xff0c;这次继续将 Linux文件管理的剩余部分说完。内容如下。 一、查看文件内容 1、cat 命令 1.1 输出文件内容 基本语法&#xff1a; cat 文件名称主要功能&#xff1a;正序输出文件的内容。 eg&#xff1a;输出 readme.txt文…

《幻兽帕鲁》1月29日游戏服务器推荐!腾讯云降低规格再次降价!

腾讯29日刷新规格&#xff0c;从14M降低到12M&#xff0c;硬盘和流量都有降低&#xff0c;但价格打下来了&#xff01;价格从66元/月降低到32元/月&#xff0c;277元/3个月降低到96元/3个月&#xff01; 三大厂商4核16G的云服务器价格对齐&#xff0c;不过具体参数略有不同 阿里…

w24文件上传之PHP伪协议

PHP支持的伪协议 file:// - 访问本地文件系统 http:// - 访问网址 ftp:// - 访问文件 php:// -访问各个输入/输出流 zlib:// -压缩流 data:// - 数据 glob:// -查找匹配的文件路径模式 phar:// - php归档 ssh2:// - Secure shell 2 rar:// - RAR ogg:// - 音频流 expect:// - …