qt实现秒表功能

最近项目里需要一个计时功能,可以实现暂停,继续,结束,开始的功能,如同秒表一样,我就写了一个demo,效果如图:
在这里插入图片描述
代码如下:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTimer>
#include <QLCDNumber>
#include <QDateTime>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();
private:void InitWidget();void InitConnect();
private:void slotPushButtonStart();void slotPushButtonPause();void slotPushButtonContinue();void slotPushButtonStop();
private:QTimer* m_timer=nullptr;QLCDNumber* m_displaytime=nullptr;QDateTime m_startclock, m_pausetime;qint64 m_pausedTime;QPushButton* PushButtonStart=nullptr;QPushButton* PushButtonPause=nullptr;QPushButton* PushButtonContinue=nullptr;QPushButton* PushButtonStop=nullptr;
};#endif // WIDGET_H
#include "widget.h"
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent)
{InitWidget();InitConnect();
}Widget::~Widget()
{
}void Widget::InitWidget()
{QVBoxLayout* vlayout=new QVBoxLayout(this);QHBoxLayout* hlayout=new QHBoxLayout(this);m_displaytime = new QLCDNumber(this);m_displaytime->setDigitCount(8);m_displaytime->setMode(QLCDNumber::Dec);m_displaytime->resize(500, 100);m_displaytime->setSegmentStyle(QLCDNumber::Flat);m_displaytime->setStyleSheet("background:transparent;color:#000000;");m_displaytime->move(QPoint(28, 763));m_displaytime->display("00:00:00");PushButtonStart=new QPushButton(this);PushButtonPause=new QPushButton(this);PushButtonContinue=new QPushButton(this);PushButtonStop=new QPushButton(this);PushButtonStart->setText("开始");PushButtonStart->setFixedSize(150,80);PushButtonPause->setText("暂停");PushButtonPause->setFixedSize(150,80);PushButtonContinue->setText("继续");PushButtonContinue->setFixedSize(150,80);PushButtonStop->setText("结束");PushButtonStop->setFixedSize(150,80);vlayout->addWidget(m_displaytime);vlayout->addStretch();vlayout->addWidget(PushButtonStart);vlayout->addStretch();vlayout->addWidget(PushButtonPause);vlayout->addStretch();vlayout->addWidget(PushButtonContinue);vlayout->addStretch();vlayout->addWidget(PushButtonStop);vlayout->addStretch();this->setLayout(vlayout);m_timer = new QTimer(this);m_timer->setInterval(1000);connect(m_timer, &QTimer::timeout, [=] {QDateTime currentDateTime = QDateTime::currentDateTime();qint64 ms = m_startclock.msecsTo(currentDateTime);qint64 seconds = ms / 1000;qint64 minutes = seconds / 60;qint64 hours = minutes / 60;// 更新分钟和秒数,以处理进位minutes %= 60;seconds %= 60;// 格式化显示时间m_displaytime->display(QString("%1:%2:%3").arg(hours, 2, 10, QLatin1Char('0')).arg(minutes, 2, 10, QLatin1Char('0')).arg(seconds, 2, 10, QLatin1Char('0')));});setFixedSize(160,500);PushButtonContinue->setEnabled(false);
}void Widget::InitConnect()
{connect(PushButtonStart,&QPushButton::clicked,this,&Widget::slotPushButtonStart);connect(PushButtonPause,&QPushButton::clicked,this,&Widget::slotPushButtonPause);connect(PushButtonContinue,&QPushButton::clicked,this,&Widget::slotPushButtonContinue);connect(PushButtonStop,&QPushButton::clicked,this,&Widget::slotPushButtonStop);
}void Widget::slotPushButtonStart()
{m_timer->start();m_startclock = QDateTime::currentDateTime();m_displaytime->display("00:00:00");PushButtonPause->setEnabled(true);
}void Widget::slotPushButtonPause()
{m_pausedTime = m_startclock.msecsTo(QDateTime::currentDateTime());m_timer->stop();PushButtonContinue->setEnabled(true);PushButtonStart->setEnabled(false);}void Widget::slotPushButtonContinue()
{m_startclock = QDateTime::currentDateTime().addMSecs(-m_pausedTime);m_timer->start();
}void Widget::slotPushButtonStop()
{m_timer->stop();PushButtonPause->setEnabled(false);PushButtonStart->setEnabled(true);PushButtonContinue->setEnabled(false);
}

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

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

相关文章

深入解析与实现:变分自编码器(VAE)完整代码详解

VAE理论上一篇已经详细讲完了&#xff0c;虽然VAE已经是过去的东西了&#xff0c;但是它对后面强大的生成模型是很有指导意义的。接下来&#xff0c;我们简单实现一下其代码吧。 1 VAE在minist数据集上的实现 完整的代码如下&#xff0c;没有什么特别好讲的。 import cv2 im…

代码随想录算法训练营day31 | 491.递增子序列、46.全排列、47.全排列 II

491.递增子序列 未去重的代码 class Solution:def findSubsequences(self, nums: List[int]) -> List[List[int]]:result []self.backtracking(nums, result, [], 0)return resultdef backtracking(self, nums, result, path, startIndex):if len(path) > 2:result.ap…

【代码随想录】【算法训练营】【第20天】 [654]最大二叉树 [617]合并二叉树 [700]二叉搜索树中的搜索 [98]验证二叉搜索树

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 19&#xff0c;一个愉快的周日~ day 20&#xff0c;一个悲伤的周一~ 题目详情 [654] 最大二叉树 题目描述 654 最大二叉树 解题思路 前提&#xff1a;构造二叉树 思路&#xff1a;寻找根节…

python两个列表如何取交集

在Python编程中&#xff0c;我们经常需要处理各种数据集合&#xff0c;包括列表&#xff08;list&#xff09;。有时候&#xff0c;我们可能想要找出两个列表中的共同元素&#xff0c;这通常被称为取交集。下面&#xff0c;我将介绍几种在Python中实现两个列表取交集的方法。 …

如何设置XHSC(华大)单片机的IO口中断

XHSC(华大)单片机IO口中断使用 一、代码说明 华大单片机的历程在华大或者小华的官网上都可以下载到,但是我们下载的历程基本注释都是非常简单,有的还没有注释;再加上小华跟华大的历程在代码架构上有所区别,所以新手在直接调用华大或者小华历程后,历程代码的可读性并不…

内网安全--域渗透准备知识

目录 知识点&#xff1a; 0x01 0x02 0x03 系列点&#xff1a; Linux主机信息收集 windows主机信息收集 知识点&#xff1a; 0、域产生原因 1、内网域的区别 2、如何判断在域内 3、域内常见信息收集 4、域内自动化工具收集 -局域网&工作组&域环境区别 -域…

Hinton揭秘GPT之父【Ilya】成长历程:Scaling Law是他学生时代就有的直觉

2003年夏天的一个周日&#xff0c;AI教父Hinton在多伦多大学的办公室里敲代码&#xff0c;突然响起略显莽撞的敲门声。门外站着一位年轻的学生&#xff0c;说自己整个夏天都在打工炸薯条&#xff0c;但更希望能加入Hinton的实验室工作。Hinton问&#xff0c;你咋不预约呢&#…

SQLite 如何导出某些SQLite3表的数据

https://deepinout.com/sqlite/sqlite-questions/44_sqlite_how_do_i_dump_the_data_of_some_sqlite3_tables.html 要导出整个SQLite3数据库的数据&#xff0c;可以使用SQLite3的.dump命令。首先&#xff0c;打开终端或命令提示符&#xff0c;并进入SQLite3终端会话。然后&…

# LLM高效微调详解-从Adpter、PrefixTuning到LoRA

一、背景 目前NLP主流范式是在大量通用数据上进行预训练语言模型训练&#xff0c;然后再针对特定下游任务进行微调&#xff0c;达到领域适应&#xff08;迁移学习&#xff09;的目的。 Context Learning v.s. SFT 指令微调是预训练语言模型微调的主流范式&#xff0c;其目的是…

嵌入式C语言--基础知识

嵌入式C语言–基础知识 嵌入式C语言--基础知识 嵌入式C语言--基础知识一. 含参数的宏与函数的不同点1&#xff09;函数2&#xff09;宏 二. scanf格式化输入的注意事项三. 指针1&#xff09;指针变量(地址变量&#xff09;2&#xff09;指针常见含义 四. 数组五. 数组与指针的区…

解读 Nginx:构建高效反向代理和负载均衡的秘密

解读 Nginx&#xff1a;构建高效反向代理和负载均衡的秘密 一、简介 Nginx (Engine-X) 是一个高性能的 HTTP 和反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 以其高并发、高可靠性、低内存消耗等特点&#xff0c;成为了众多互联网公司首选的服务器软…

通用代码生成器应用场景三,遗留项目反向工程

通用代码生成器应用场景三&#xff0c;遗留项目反向工程 如果您有一个遗留项目&#xff0c;要重新开发&#xff0c;或者源代码遗失&#xff0c;或者需要重新开发&#xff0c;但是希望复用原来的数据&#xff0c;并加快开发。 如果您的项目是通用代码生成器生成的&#xff0c;…

在智慧城市建设中,大数据发挥着怎样的关键作用?

在智慧城市建设中&#xff0c;大数据发挥着以下关键作用&#xff1a; 数据采集与监测&#xff1a;大数据技术能够帮助城市采集和监测各种数据&#xff0c;包括气象、环境、交通、能源等方面的数据。这些数据可以用来分析和预测城市的运行情况&#xff0c;并为城市的各个部门提供…

阿里云产品DTU评测报告(二)

阿里云产品DTU评测报告&#xff08;二&#xff09; 问题回顾问题处理继续执行 问题回顾 基于上一次DTU评测&#xff0c;在评测过程中遇到了windows系统情况下执行amp命令失败的情况&#xff0c;失败情况如图 导致后续命令无法执行&#xff0c;一时之间不知如何处理&#xff0…

20 道大模型面试问题(含答案)

大型语言模型在生成式人工智能&#xff08;GenAI&#xff09;和人工智能&#xff08;AI&#xff09;中正变得越来越有价值。这些复杂的算法增强了人类的能力&#xff0c;并在各个领域促进了效率和创造力。 节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0…

python 两个表格字段列名称值,对比字段差异

支持xlsx,xls文件&#xff0c;相互对比字段列 输出两个表格文件相同字段&#xff0c;置底色为绿色 存在差异的不同字段&#xff0c;输出两个新的表格文件&#xff0c;差异字段&#xff0c;置底色为红色 注意点&#xff1a;读取的文件仅支持xlsx格式&#xff0c;头列需要删除…

【AD21】Gerber文件的输出

Gerber文件是对接生产的文件&#xff0c;该文件包含了PCB的所有层的信息&#xff0c;如铜层、焊盘、丝印层、阻焊层等。板厂使用这些文件来准备生产工艺。虽然可以将PCB发给板厂去打板&#xff0c;但是对于公司而言&#xff0c;直接发PCB会有泄密风险&#xff0c;Gerber文件会相…

《宝贵的人生建议》

致读者 2024/05/25 发表想法 简练表达&#xff0c;发散&#xff08;灵活&#xff09;运用。 原文&#xff1a;在写作过程中&#xff0c;我的主要精力是用在这个方面&#xff1a;把这些重要的经验教训浓缩为尽可能紧凑简炼、易于传播的语言。我鼓励读者在阅读时扩展这些“种子”…

不能错过的AI知识学习神器「Mo卡片」

1. 「Mo卡片」——知识点的另一种承载方式 1.1 产品特点 &#x1f4f1;一款专为渴望理解和掌握人工智能知识的小伙伴量身打造的轻量级 App。 &#x1f3f7;AI 知识卡片集 Mo卡片内置了 26 套卡片集&#xff0c;总计 1387 张卡片&#xff0c;每张卡片都能获得 1 个核心知识。…