QT设计电子时钟类

2023-11-05

1.界面效果

在这里插入图片描述

2、类的声明

wedgit.h

class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget* parent = nullptr); //默认构造函数
    ~Widget();                         //默认析构函数

    void timerEvent(QTimerEvent*);    //计时器函数
    void setTime(int, int, int); //设置时间
    void display();           //显示时间
    void minusSecond(int);  //减去指定秒数
    void addSecond(int);    //加上指定秒数
    void formatTime();        //时间格式化
    void stop();              //暂停
    void reSet();             //重置回八点

private slots:
    void on_buttonBox_accepted();    //减少指定秒数
    void on_buttonBox_2_accepted();  //增加指定秒数
    void on_buttonBox_3_accepted();  //调用setTime()函数设置时间
    void on_pushButton_clicked();    //++
    void on_pushButton_2_clicked();  //--
    void on_pushButton_3_clicked();  //暂停
    void on_pushButton_4_clicked();  //重置

private:
    Ui::Widget* ui;
    int hour;
    int minute;
    int second;
    int s;       //暂停时使用
};
  1. 使用QT自带函数void timerEvent(QTimerEvent*); 用以加载时间计数器,每一秒刷新一次。同时在ui上添加有个按钮。
  2. **private slots:**中将ui界面的按钮绑定到功能函数。
  3. 变量s用以从控制台输入变量将时钟 暂停。

3、各函数的实现

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <qinputdialog.h>
#include <QPushButton>

//默认构造函数
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->show();
    this->hour=8;         //默认对象的时间为:08:00:00
    this->minute=0;
    this->second=0;
    startTimer(1000); //窗口启动一秒后开始计时
    this->s=1;        //stop值初设为1
    this->ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("增加秒数"));//按钮命名
    this->ui->buttonBox_2->button(QDialogButtonBox::Ok)->setText(tr("减少秒数"));
    this->ui->buttonBox_3->button(QDialogButtonBox::Ok)->setText(tr("设置时间"));
}

//默认析构函数
Widget::~Widget()
{
    delete ui;
}

//格式化时间(进制问题处理)
void Widget::formatTime()
{
    if (second >= 60||second<0)
    {
        if(second >= 60)
        {
            minute += second/60;
            second %= 60;
        }
        if(second < 0)
        {
            minute += second/60-1;
            second = 60 + (second % 60);
        }
    }
    if (minute >= 60||minute<0)
    {
        if(minute>=60)
        {
            hour += minute/60;
            minute %= 60;
        }
        if(minute<0)
        {
            hour += minute/60 - 1;
            minute = 60 + ( minute % 60);
        }
    }
    if (hour >= 24||hour<0)
    {
        hour = 0;
    }
}

//暂停函数
void Widget::stop()
{
    this->s=!this->s;
}

//重置函数
void Widget::reSet()
{
    this->hour=8;         //默认对象的时间为:08:00:00
    this->minute=0;
    this->second=0;
    this->display();
}

//定义计时器(刷新用),每一秒一帧&&调用display()函数
void Widget::timerEvent(QTimerEvent *)
{
    if(s)
    {
        display();
        this->second++;
    }
}

void Widget::setTime(int hour, int minute, int second)
{
    this->hour = hour;
    this->minute = minute;
    this->second = second;
    this->display();
}

//显示时间函数
void Widget::display()
{
    if(hour>=24||hour<0||minute>=60||minute<0||second>=60||second<0)
        formatTime();
    QString tempstr = QString("%1:%2:%3")   //截取时间
                   .arg(hour, 2, 10, QChar('0'))
                   .arg(minute, 2, 10, QChar('0'))
                   .arg(second, 2, 10, QChar('0'));
   ui->aaaa->setText(tempstr);
}

//减去指定秒数
void Widget::minusSecond(int n)
{
    this->second -= n;
}

//增加指定秒数
void Widget::addSecond(int n)
{
    this->second += n;
}

//增加指定秒数的按钮
void Widget::on_buttonBox_accepted()
{
    bool ok;

    QString text = QInputDialog::getText(this, tr("修改时间"),tr("请输入增加的秒数"), QLineEdit::Normal,nullptr, &ok);
    if (ok && !text.isEmpty())
    {
        int a=text.toInt();
        addSecond(a);
        display();
    }
}

//减少指定秒数的按钮
void Widget::on_buttonBox_2_accepted()
{
    bool ok;

    QString text = QInputDialog::getText(this, tr("修改时间"),tr("请输入减少的秒数"), QLineEdit::Normal,nullptr, &ok);
    if (ok && !text.isEmpty())
    {
        int a=text.toInt();
        minusSecond(a);
        display();
    }
}

//设置时间的按钮
void Widget::on_buttonBox_3_accepted()
{
    bool ok;
    QString text = QInputDialog::getText(this, tr("设置时间"),tr("例如12:09:44输入 120944"), QLineEdit::Normal,nullptr, &ok);
    if (ok && !text.isEmpty())
    {
        QString _hour = text.mid(0, 2);
        int hour=_hour.toInt();
        QString _minute = text.mid(2, 2);
        int minute=_minute.toInt();
        QString _second = text.mid(4, 2);
        int second=_second.toInt();
        setTime(hour, minute, second);
    }
}

//只加一秒的按钮
void Widget::on_pushButton_clicked()
{
    this->second++;
    this->display();
}

//只减一秒的按钮
void Widget::on_pushButton_2_clicked()
{
    this->second--;
    this->display();
}


//暂停按钮
void Widget::on_pushButton_3_clicked()
{
    stop();
    this->display();
}

//重置回08:00:00的按钮
void Widget::on_pushButton_4_clicked()
{
    reSet();
    this->display();
}

4、main函数

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    w.resize(1200,800);
    w.setWindowTitle("Clock_B20030211");
    return a.exec();
}

5、一点总结

可以学到

  1. 自定义窗口标题
  2. 自定义窗口大小
  3. ui界面的按钮绑定函数信号
  4. 从控制台获取变量输入
  5. 相关QT和C++知识

6、评价

写的不好,望大家见谅!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT设计电子时钟类 的相关文章

  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span

随机推荐

  • 6、状态模式

    文章目录 概念 3个角色 demo 概念 状态模式属于行为型模式 只需要改变对象状态即可改变对象的行为 状态模式对 开闭原则 的支持并不太好 所以对象状态最好为有限个且不常变动 场景 1 行为随状态 属性改变而改变的场景 2 条件 分支语句
  • 终于拿下淘宝了。淘宝抓取,淘宝爬虫。taobao spider

    上个demo先
  • Linux 查看当前路径下所有文件夹大小的方法

    进入需要查看的目录 例如 根目录 cd 查看当前目录下每个文件夹的大小 du sh 查看当前目录下每个文件夹的大小并排序 单位 字节 n 按照数值排序 du s sort n 补充 du sh 查看当前目录总共占的容量 而不单独列出各子项占
  • Task-Oriented Conversation Generation Using Heterogeneous Memory Networks

    EMNLP 2019 录用长文 Abstract 如何将外部知识库与对话模型结合起来是一个重要的问题 传统上人们是使用了Memory Network 然而当面对多种来源的 异构的info时 Mem对这些info的处理并不好 我理解的是权重的
  • Numpy基础数据结构

    Numpy基础数据结构 NumPy数组是一个多维数组对象 称为ndarray 其由两部分组成 实际的数据 描述这些数据的元数据 Numpy Python开源的科学计算工具包 高级的数据编程工具 ndarray 是强大的N维数组对象 对数据结
  • Eclipse导入项目No projects are found to import

    如果发现导入工程 impot 的时候 出现 No projects are found to import 的提示 首先查看项目目录中是否有隐藏文件 project 还有目录结构也还要有一个隐藏文件 classpath 如果没有 你可以参考
  • 不能不知道的OS模块的那些常用函数(附内置变量)

    文章目录 OS 模块 1 1 常用函数 1 2 使用示例 1 3 内置变量 1 4 附 内置变量详解 OS 模块 该模块提供了各种函数 允许您操作文件路径和检查与路径相关的信息 比如是否存在 文件扩展名 目录名等等 1 1 常用函数 其中一
  • [DIP]如何提取文件中的公章,并识别其朝向是否准确

    任务描述 我们需要知道 我们盖在文件上的红章是否是端正的 需要解决的问题 1 图章的识别 2 图章的定位 3 图章的方向判定 思路 图章基本上是红色的 我们先根据颜色提取可能的图章区域 当然 假如文档中 还有其他红色的区域 这一步都会提取出
  • 从Authy中导出账户和secret

    文章作者 GoodBoyboy 文章链接 https blog goodboyboy top posts 2689781648 html 版权声明 本博客所有文章除特别声明外 均采用 CC BY NC SA 4 0 许可协议 转载请注明来自
  • oracle bulk collect forall,Oracle批量绑定forallbulkcollect用法

    采用bulk collect 可以将查询结果一次性的加载到collections中 而不是通过CURSOR一条一条地处理 可以在select into fetchinto 采用bulk collect 可以将查询结果一次性的加载到colle
  • 银行项目测试

    主要的核心业务 存款业务 吸收客户的存款 为客户发放利息 属于负债业务 贷款业务 发放贷款给客户 收取客户的利息 属于银行的资产业务 中间业务 银行已中间人的身份 为客户办理业务 收取客户的手续费 例如 批量代发工资 批量代收水 电 燃气费
  • 华为OD机试 Python 【单词加密】

    题目 给你一句英文 里面有很多单词 单词间用空格隔开 我们要对这句子做点的变化 加密规则 如果单词里有元音 a e i o u 大小写都算 就把元音变成 如果一个单词完全没有元音 那就让这个单词的第一个和最后一个字母交换位置 输入 一句英文
  • SKB几个复制函数的区别

    1 skb clone Skb clone 函数只是复制sk buff结构 并不复制skb的数据缓冲区 Clone后的sk buff结构与原始的sk buff指向同一数据缓冲区 原始的和clone后的skb描述符的cloned值都会被置1
  • 前端基础之滚动显示

    marquee滚动标签 注 该标签已经过时 被w3c弃用 使用样例
  • 设计模式(一)- 模板方法模式

    模板方法模式 文章目录 模板方法模式 1 模板方法模式 1 介绍 2 应用实例 代码 1 父类抽象模板 统一方法定为final 2 子类去实现不同的方法 3 其他子类实现不同的方法 4 结果展示 1 模板方法模式 在模板模式 Templat
  • 微信小程序 功能页导航 functional-page-navigator 组件

    完整微信小程序 Java后端 技术贴目录清单页面 必看 仅在插件中有效 用于跳转到插件功能页 属性 类型 默认值 必填 说明 最低版本 version string release 否 跳转到的小程序版本 线上版本必须设置为 release
  • linux安装idea并创建快捷方式

    一 安装 1 下载 在linux自带的火狐浏览器打开下载更方便 下载 IntelliJ IDEA JetBrains 功能强大 符合人体工程学的 Java IDE 选择Linux 这里以下载社区版为例 我下载的版本是2022 2 3 文件名
  • 了解应用层

    应用层 1 概述 2 应用程序组织方式 2 1 C S方式 2 1 P2P方式 3 动态主机配置协议DHCP 3 1 DHCP工作流程 4 域名系统DNS 4 1 域名结构 4 2 域名分类 4 3 域名服务器 4 3 1 分类 4 4 D
  • Python-爬虫(Scrapy爬虫框架,爬取豆瓣读书和评分)

    文章目录 1 Scrapy注意点 2 Scrapy爬取豆瓣读书和评分 代码部分 数据定义items py 爬虫部分spiders book py 数据存储部分pipelines py 启动爬虫执行cmd命令 start py 1 Scrap
  • QT设计电子时钟类

    1 界面效果 2 类的声明 wedgit h class Widget public QWidget Q OBJECT public Widget QWidget parent nullptr 默认构造函数 Widget 默认析构函数 vo