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  QDateTimeQDateTime 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);//加2sui->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.mzph.cn/news/652791.shtml

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

相关文章

学习PyQt5

1、布局之后&#xff0c;无法移动对象到指定区域&#xff0c;无法改变对象大小。 原因&#xff1a;因为CtrlA选中了整个窗口&#xff0c;然后布局的时候就相当于整个窗口都按照这种布局&#xff0c;如选了水平布局&#xff0c;按钮一直在中间&#xff0c;无法拖到其它位置。 …

Unity之动画和角色控制

目录 &#x1f4d5; 一、动画 1.创建最简单的动画 2.动画控制器 &#x1f4d5;二、把动画和角色控制相结合 &#x1f4d5;三、实现实例 3.1 鼠标控制角色视角旋转 3.2 拖尾效果 &#x1f4d5;四、混合动画 最近学到动画了&#xff0c;顺便把之前创建的地形&#xff0…

go语言数组和切片

1. 数组Array Golang Array和以往认知的数组有很大不同。 1. 数组&#xff1a;是同一种数据类型的固定长度的序列。2. 数组定义&#xff1a;var a [len]int&#xff0c;比如&#xff1a;var a [5]int&#xff0c;数组长度必须是常量&#xff0c;且是类型的组成部分。一旦定义&…

Redis3-秒杀活动

秒杀 准备工作 我是参照下面这位大佬的i骄傲成下载的 csdn友情链接 Jmeter模拟多线程的压力测试工具 秒杀代码&#xff1a; package com.aaa.controller;import io.netty.util.internal.StringUtil; import org.apache.commons.lang.StringUtils; import org.springfram…

【大数据】详解 Flink 中的 WaterMark

详解 Flink 中的 WaterMark 1.基础概念1.1 流处理1.2 乱序1.3 窗口及其生命周期1.4 Keyed vs Non-Keyed1.5 Flink 中的时间 2.Watermark2.1 案例一2.2 案例二2.3 如何设置最大乱序时间2.4 延迟数据重定向 3.在 DDL 中的定义3.1 事件时间3.2 处理时间 1.基础概念 1.1 流处理 流…

深度推荐模型之DeepFM

一、FM 背景&#xff1a;主要解决大规模稀疏数据下的特征组合遇到的问题&#xff1a;1. 二阶特征参数数据呈指数增长 怎么做的&#xff1a;对每个特征引入大小为k的隐向量&#xff0c;两两特征的权重值通过计算对应特征的隐向量内积 而特征之间计算点积的复杂度原本为 实际应…

幻兽帕鲁的搭建和幻兽帕鲁需要什么配置的服务器

前言 大家好&#xff0c;今天教大家如何快速搭建幻兽帕鲁&#xff0c;并能满足8-32人游玩 第一步 购买服务器 1.CPU&#xff1a;4核&#xff08;最低需要4核起&#xff0c;当然可以选择更高的&#xff09;CPU的选择更看重单核性能&#xff0c;尽量选择主频2.5GHz以上的&#…

OpenTCS IDEA 全流程搭建和运行指南

OpenTCS IDEA 全流程搭建和运行指南 JDK安装下载JDK版本 openTCS源码下载IDEA 打开运行查看下载源码中gradle版本号下载gradle 二进制文件配置IDEA Gradle本地仓库IDEA打开openTCS项目运行顺序 JDK安装 下载JDK版本 JDK网址 注意&#xff1a; 请下载官方文档标准的java13JDK o…

4G模块Air724如何访问天气信息

1.这是获得json数据&#xff1a; 左边是标准官方api说明中的&#xff0c;右边是我用串口获取的&#xff1a; 2.首先找一个天气服务器&#xff0c;我的&#xff1a;YY天气&#xff0c;直接百度&#xff0c;注册&#xff0c;然后找api即可&#xff1a; 3.用接口工具测试接口是否…

AV Foundation 视频播放中的可视拖拽进度条

引言 在视频播放软件中&#xff0c;通过拖拽进度条来调整播放进度几乎已成为不可或缺的功能。这一功能使用户能够精确指定视频播放的时间点。近年来&#xff0c;视频播放器在原有的拖拽进度条基础上进行了更加人性化的性能提升&#xff0c;引入了可视化拖拽条。这一创新为用户…

Ps:根据 HSB 调色(以可选颜色命令为例)

在数字色彩中&#xff0c;RGB 和 HSV&#xff08;又称 HSB&#xff09;是两种常用的颜色表示方式&#xff08;颜色模型&#xff09;。 在 RGB 颜色模式下&#xff0c;Photoshop 的红&#xff08;Red&#xff09;、绿&#xff08;Green&#xff09;、蓝&#xff08;Blue&#xf…

基于SpringBoot微信小程序的宠物美容预约系统设计与实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作✌ 主要内容&#xff1a;SpringBoot、Vue、SSM、HLM…

rabbitmq基础-java-3、Fanout交换机

1、简介 Fanout&#xff0c;英文翻译是扇出。 2、 特点 1&#xff09; 可以有多个队列 2&#xff09; 每个队列都要绑定到Exchange&#xff08;交换机&#xff09; 3&#xff09; 生产者发送的消息&#xff0c;只能发送到交换机 4&#xff09; 交换机把消息发送给绑定过的…

应用机器学习的建议

一、决定下一步做什么 在你得到你的学习参数以后&#xff0c;如果你要将你的假设函数放到一组新的房屋样本上进行测试&#xff0c;假如说你在预测房价时产生了巨大的误差&#xff0c;你想改进这个算法&#xff0c;接下来应该怎么办&#xff1f;实际上你可以考虑先采用下面的几种…

防御保护--第一次实验

目录 一&#xff0c;vlan的划分及在防火墙上创建单臂路由 二&#xff0c;创建安全区域 三&#xff0c;配置安全策略 四&#xff0c;配置认证策略 五&#xff0c;配置NAT策略 1.将内网中各个接口能够ping通自己的网关 2..生产区在工作时间内可以访问服务器区&#xff0c;仅…

AI大模型开发架构设计(6)——AIGC时代,如何求职、转型与选择?

文章目录 AIGC时代&#xff0c;如何求职、转型与选择&#xff1f;1 新职场&#xff0c;普通人最值钱的能力是什么?2 新职场成长的3点建议第1点&#xff1a;目标感第2点&#xff1a;执行力第3点&#xff1a;高效生产力 3 新职场会产生哪些新岗位机会?如何借势?4 新职场普通人…

数据结构-线性表

文章目录 数据结构—线性表1.线性表的定义和基本操作线性表的定义线性表的特点线性表的基本操作 2.线性表的顺序存储和链式存储表示顺序存储链式存储单链表循环链表双向链表 数据结构—线性表 1.线性表的定义和基本操作 线性表的定义 定义&#xff1a;线性表是具有相同数据类…

数据结构篇-03:堆实现优先级队列

本文着重在于讲解用 “堆实现优先级队列” 以及优先级队列的应用&#xff0c;在本文所举的例子中&#xff0c;可能使用优先级队列来解并不是最优解法&#xff0c;但是正如我所说的&#xff1a;本文着重在于讲解“堆实现优先级队列” 堆实现优先级队列 堆的主要应用有两个&…

sqli-lbs靶场搭建

目录 环境小皮源码下载 1.源码解压&#xff1a; 2.搭建网站 2.1点击创建网站 2.2修改sql-connections\db-creds.inc 2.3重新启动 3.访问你设置的域名 3.1点击启动数据库配置 3.2返回第一个页面&#xff08;开启题目&#xff09; sqlilbs靶场搭建 环境小皮源码下载 下载地址&am…

【服务器】宝塔面板的使用手册

目录 &#x1f337;概述 &#x1f33c;1. 绑定域名 &#x1f33c;2. 添加端口 &#x1f33c;3. 安装docker配置docker​​​​​​​ &#x1f33c;4. 软件商店 &#x1f33c;5. 首页 &#x1f337;概述 宝塔面板的安装教程&#xff1a;【服务器】安装宝塔面板 &#x1f…