QT实现--电子时钟

2023-11-03

QT–电子时钟

简介:

  • 使用了绘图事件、定时事件,有两个窗口,一个窗口用于设置时间(主窗口),一个是时钟窗口

1.主窗口

menu.h文件:
#ifndef MENU_H
#define MENU_H

#include <QWidget>
#include <QPushButton>
#include <QLineEdit>

class menu : public QWidget
{
    Q_OBJECT
public:
    explicit menu(QWidget *parent = nullptr);

public:
    QPushButton *bt1;      //显示时钟
    QPushButton *bt2;      //设置时间
    QLineEdit *ls;         //输入秒
    QLineEdit *lm;         //输入分
    QLineEdit *lh;         //输入时

signals:
    void display();                      //显示信号
    void setTime(int h,int m,int s);     //设置时间信号

public:
    void send_s();         
    void send_t();

public slots:
};

#endif // MENU_H

menu.cpp文件:
#include "menu.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLabel>

menu::menu(QWidget *parent) : QWidget(parent)
{
    resize(480,480);

    QHBoxLayout *hb = new QHBoxLayout();
    QVBoxLayout *vb = new QVBoxLayout();

    QLabel *l1  = new QLabel(":");
    QLabel *l2 = new QLabel(":");

    bt1 = new QPushButton("显示时钟");
    bt2 = new QPushButton("设置时间");
    ls = new QLineEdit("0");
    lm = new QLineEdit("0");
    lh = new QLineEdit("0");

    hb->addWidget(lh);
    hb->addWidget(l1);
    hb->addWidget(lm);
    hb->addWidget(l2);
    hb->addWidget(ls);

    hb->addWidget(bt2);

    vb->addLayout(hb);
    vb->addWidget(bt1);

    this->setLayout(vb);

    connect(bt1,&QPushButton::released,this,&menu::send_s);    //显示时钟
    connect(bt2,&QPushButton::released,this,&menu::send_t);    //设置时间

}

void menu::send_t()           //设置
{
    int s = ls->text().toInt();
    int m = lm->text().toInt();
    int h = 5 * lh->text().toInt();

    emit setTime(h,m,s);
}
void menu::send_s()           //显示
{
    emit display();
}

2.时钟窗口

widget.h文件:
#ifndef WIDGET_H
#define WIDGET_H

#include "menu.h"
#include <QWidget>
#include <QPaintEvent>  //绘图事件
#include <QTimerEvent>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    int s = 0;     //秒
    int m = 0;     //分
    int h = 0;     //时
    QString T;     //总时间

    QPainter *painter;

    menu w1;

public:
    void send_s();                            //显示钟表
    void get_t(int h1,int m1,int s1);                             //设置时间
    void timerEvent(QTimerEvent *adf);        //定时
    void paintEvent(QPaintEvent *event);      //绘图
public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

widget.cpp文件:
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QPainter>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    w1.show();
    startTimer(100);     //定时1秒

    resize(470,470);
    this->setMaximumSize(470,470);      //设置窗口大小

    connect(&w1,&menu::display,this,&Widget::send_s);  //显示钟表
    connect(&w1,&menu::setTime,this,&Widget::get_t);
}

void Widget::send_s()   //显示钟表
{
    this->show();
}

void Widget::get_t(int h1,int m1,int s1)
{
    s = s1;
    m = m1;
    h = h1;
}

void Widget::timerEvent(QTimerEvent *event)
{
    qDebug() <<"定时" ;
    s ++;
    if(s == 60)   //180+360=540
    {
        m++;
        s = 0;
    }

    if(m == 5)
    {
        h ++;
    }
    if(m == 60)
    {
        m = 0;
    }
    if(h == 12)
    {
        h = 0;
    }
    QString Ss = QString::number(s);
    QString Sm = QString::number(m);
    int H = h / 5;
    QString Sh = QString::number(H);
    T = Sh + ":" + Sm + ":" +Ss;
    qDebug() <<T;

}

void Widget::paintEvent(QPaintEvent *event)
{
     painter = new QPainter(this);    //画家

     /*   画笔    */
     QPen pen(Qt::red,0);
     painter->setPen(pen);

     /*   移动画家  */
     painter->translate(this->width()/2,this->height()/2);

     /*   画钟    */
     QRectF target(-(this->width()/2),-(this->height()/2), this->width(), this->width());
     QRectF source(0,0, this->width(), this->height());
     QPixmap pixmap(":/new/prefix1/time1.png");
     painter->drawPixmap(target, pixmap, source);

     /*    画秒针  */
     QRectF target_s(0,5,200, 220);
     QRectF source_s(0,0, this->width(),this->height());
     QPixmap pixmap_s(":/new/prefix1/time_s.png");

     painter->rotate(s*6+180);            //定时旋转秒针
     painter->drawPixmap(target_s, pixmap_s, source_s);

     /*   画分针  */
     QRectF target_m(-5,-5,200, 220);
     QRectF source_m(0,0, this->width(), this->height());
     QPixmap pixmap_m(":/new/prefix1/time_m.png");

     painter->rotate(-(s*6+180));     //移动回原位
     painter->rotate(m*6+180);             //旋转分针
     painter->drawPixmap(target_m, pixmap_m, source_m);

     /*   画时针  */
     QRectF target_h(-7,-7,200, 220);
     QRectF source_h(0,0, this->width(), this->width());
     QPixmap pixmap_h(":/new/prefix1/time_h.png");


     painter->rotate(-(m*6+180));     //移动回原位
     painter->rotate((h*6)+180);             //旋转分针
     painter->drawPixmap(target_h, pixmap_h, source_h);

     painter->rotate(-(h*6+180));
     painter->drawText(-50,0,100,50,Qt::AlignCenter, T);  //数字时钟
     painter->rotate(h*6+180);

     update();

}

Widget::~Widget()
{
    delete ui;
}

3.运行效果图

在这里插入图片描述在这里插入图片描述

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

QT实现--电子时钟 的相关文章

  • Qt 的 sysroot 和前缀选项的实际示例是什么

    我正在查看可以运行的所有选项configureQt 提供的脚本 特别是 qt everywhere opensource src 5 2 0 经过大量搜索后 我确定这些东西充其量记录很少 所以我希望我能得到一些帮助 当我查看描述时prefi
  • 删除行时 QModelIndex 变得无效

    我正在子类化QAbstractItemModel显示项目QTreeView 并且在这个子类中 projectModel 我有一个功能可以删除树视图中当前选定的索引 Component是用于表示模型所有成员的类 void projectMod
  • Qt进度条不是递增的,而是跳跃的

    我遇到 Qt GUI 进度条问题 问题是 对于较大的文件 350MB 及以上 进度条在开始时按预期工作 然后它似乎有一段时间没有移动 然后在工作完成时突然跳到 100 我不确定为什么会发生这种情况 我想知道是否有一些 Qt 之谜导致了这种情
  • Qt 中的 QRadioButton 选中/取消选中问题

    我发现与选中 取消选中 QRadioButton 相关的问题 我用于检查 白点 和取消检查 没有白点 的图像未更新 我的问题是 我已经实现了一些 QRadioButton 第一次所有 QRadioButton 都检查为 false 因此 本
  • 如何在C++、Qt、QML、Blackberry 10 Cascades Beta 3 SDK中制作图表/图形(如折线图、条形图、圆形图)等?

    我需要知道如何在 Blackberry 10 Cascades Beta 3 SDK QML Qt C 中制作图表 图表 如果有人可以向我展示一个例子或向我指出一些可以告诉我如何做到这一点的东西 我将不胜感激 您应该查看 QChart js
  • 包装 C++ Qt 小部件以便在 Python 中与 PySide 一起使用

    在 Python 中使用自定义 Qt 显示小部件包装自定义 C 库以便在基于 PySide 的 QApplication 中使用的最佳方法是什么 C 库是否需要特殊处理才能使用 SWIG 进行包装 封装的 Qt 小部件能否与 PySide
  • Qt Designer 与手动编码

    每次我使用图形工具包开始一个项目时 第一个冲突就会发生在如何处理视觉设计和小部件布局的决定上 图形工具还是手动编码 这是一个非常棘手 主观的问题 因为大多数人会根据个人喜好来决定 它还很大程度上取决于图形工具的质量 在这种情况下 我想只关注
  • 如何管理返回到 QML 的动态分配的 QObject 的生命周期?

    我有这个代码 QVariant componentFromCode QString code QQmlComponent component new QQmlComponent engine engine gt setObjectOwner
  • 将信号/槽(QObject)添加到 QGraphicsItem:性能受到影响?

    我想将信号 槽添加到 QGraphicsItem 以便我可以从另一个线程访问 QGraphicsItemObjects 我知道有两个选项 使用 QGraphicsObject 或从 QObject 和 QGraphicsItem 继承 使用
  • QT“找不到 Qt 平台插件“xcb””

    我出于学术原因安装了QT everywhere 5 15开源版 但无法运行程序 首先 我编译了必要的源文件make并安装了QT Creator 然后我选择qmake来运行其中的程序 当我尝试运行示例程序时 遇到以下错误 qt qpa plu
  • Qt 远程文件浏览器

    我想知道是否有人使用过 Qt 远程文件浏览器 根据我的理解 我有两个选择 当涉及到远程文件时 将 QFileDilaog 与自定义代理模型结合使用 该模型将负责提供远程文件 目录结构 使用自定义对话框 并为本地文件提供标准文件系统模型 为远
  • 删除 QComboBox“下拉”动画

    我正在使用 Qt 4 8 并且想在单击 QComboBox 时摆脱 下拉 动画 我也想稍微移动一下 到目前为止 我一直在考虑重新实现 showPopup 和 hidePopup 但不知道如何使其工作 此外 每次我尝试使用 CSS 进行移动或
  • Qt 信号槽,新符号中的转换类型[重复]

    这个问题在这里已经有答案了 鉴于以下两个 connect ui gt comboBox SIGNAL activated QString ps SLOT requestPlotsAvailable QString connect ui gt
  • Qt、PushButton、id 属性?有什么方法可以知道点击了哪个按钮

    void MainWindow addRadioToUI int button cunter 4 while database isEmpty button cunter QPushButton one new QPushButton Pl
  • 如何在Qt中设置编译器?

    我对 Qt 完全陌生 我下载了离线版本 Qt 5 3 2 for Windows 64 bit VS 2013 OpenGL 573 MB 我无法编译我的项目 I have Qt Creator 3 2 1 开源 基于Qt 5 3 2 MS
  • QT 应用程序运行时错误?

    我已经在 Windows 7 的 Qt5 1 上开发了一个应用程序 现在我想分发它 由于我使用了 MINGW 编译器 因此无法静态构建它 我使用dependency walker找出所有dll并打包 当我在未安装 QT 开发环境的计算机上运
  • 从 QML 实例化 C++ 对象会产生巨大的内存使用开销

    实例化一个QObjectC 堆中的派生类为每个对象提供了大约 160 个字节 通过注册相同的对象qmlRegisterType 用于从 QML 创建并通过以下方式动态创建对象createObject 每个对象给我 2000 多个字节 这是完
  • 仅将非模态 QDialog 窗口放置在我的应用程序顶部,而不是所有应用程序顶部

    我有一个 QDialog 窗口 它应该始终位于我的应用程序顶部 它不是模态的 用户可以随时与对话框和主应用程序进行交互 使用窗口保持在顶部提示在某种程度上实现了这一点 但是 该对话框仍然位于所有其他正在运行的应用程序 例如记事本 chrom
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P

随机推荐

  • Chrome浏览器乱码问题

    浏览器乱码问题 最近 发现自己的chrome浏览器直接乱码了 但是一直没时间去处理 最近找到了解决方法 给出一份总结 首先 作为业界公认最好的浏览器 chrome是不会存在乱码这种低级bug的 通过百度提示 我也很憨的去找过一些chrome
  • js逆向-某狗翻译

    声明 本文仅供学习参考 请勿用于其他途径 违者后果自负 前言 目标网站 aHR0cHM6Ly9mYW55aS5zb2dvdS5jb20vdGV4dA 接口 aHR0cHM6Ly9mYW55aS5zb2dvdS5jb20vYXBpL3RyYW
  • 大数据技术——使用IDEA开发Scala程序

    目录 一 使用IDEA开发WordCount程序 3 二 实验目的 3 三 实验要求 3 四 实验环境 3 五 实验步骤 3 4 1 1启动IDEA并创建一个新项目WordCount 3 4 1 2为WordCount项目添加Scala框架
  • “大湾区杯”金融数学建模赛后闲谈

    上个月中 2020年10月 同学推给我的这个比赛 和其他数学建模大赛不同的是 这是一个金融方向的建模比赛 因为是第一届 所以我想获奖的几率应该还蛮大的 就兴致冲冲的找队友参加了 以下是我参加本次比赛的经验 写下来供以后来参赛的同学参考 关于
  • 【华为OD】

    目录 一 题目描述 二 输入描述 三 输出描述 示例一 输入 输出 示例二 输入 输出 四 Java玩法 一 题目描述 在一长方形停车场内 每个车位上方都有对应监控器 当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时 监控器才需
  • E280-2G4T12S(SX1280)_STM21F1X驱动分享

    根据需求 我们需要实现的功能有 1 工作模式的切换 2 接收数据的存储处理 3 发射数据的准备 4 通信逻辑的设计 SX1280驱动开发的主要步骤如下 初始化 工作模式的切换 测试结果 1 1 初始化 首先参考手册的硬件连接 控制芯片的工作
  • 力扣之各位相加(给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。)

    各位相加 题目描述 给定一个非负整数 num 反复将各个位上的数字相加 直到结果为一位数 示例 输入 38 输出 2 解释 各位相加的过程为 3 8 11 1 1 2 由于 2 是一位数 所以返回 2 var addDigits funct
  • 区块链+社交=颠覆性的革新?

    要说在如今互联网时代 最有价值的应用是什么 毫无疑问 是社交 不论是微信 微博还是Facebook或者Twitter 这些社交媒体的出现 都让人们有了更快获取信息的途径与渠道 同时在社交媒体平台中由于用户也在不断产生新的内容 因此获得了非常
  • 分布式爬虫调度及数据管理系统[Python]

    一 摘要 本系统主要包括三大部分 Scrapy爬虫部分 Flask任务调度API部分及Django后台管理部分 三大部分相对独立又有一些内在联系 如果想单独学习某一框架可以单独只看某一部分 非常适合刚接触某框架并想深入学习的同学拿来练手 本
  • docker部署excalidraw画图工具

    docker部署excalidraw画图工具 环境搭建 安装docker 安装docker compose 部署excalidraw画图工具 准备工作 配置yaml DIY 自定义网站title 自定义字体 修改完成后 最后重启服务 环境搭
  • vue提交ajax表单,Vue使用axios AJAX提交请求方法,表单提交

    我们在使用jquery时直接可以使用ajax进行请求数据 提交表单 那我们在使用vue时已经没有jquery了 那么我们怎么提交表单 请求数据呢 我们使用axios 读音 爱克斯ios 以下是知乎读法 好了 我们言归正传 说一说vue怎么使
  • 虚拟服务器怎么不设置锁屏,虚拟机下centos如何取消锁屏_网站服务器运行维护...

    centos系统如何设置显示器不休眠 网站服务器运行维护 centos系统设置显示器不休眠的方法是 1 首先 打开xorg conf文件 2 然后 添加配置 Option BlankTime 0 与 Option SuspendTime 0
  • C语言实例:输出各种形式的九九乘法表

    相信各位学习C语言的小伙伴们 都遇到过打印九九乘法表的问题 本篇文章将会讲述各种形式的九九乘法表的打印 第一种形式 如图 这种形式的九九乘法表也是最简单的一种 我们发现每一行结果的列数等于行数 对于这种有规律的我们都可以通过循环实现 int
  • 【基于Docker-Compose安装ELK日志系统完整操作步骤】

    一 前言 ELK是三个开源软件的缩写 分别是Elasticsearch Logstash Kibana 一般情况下会结合FileBeat使用 Elasticsearch 是个开源分布式搜索引擎 它的特点有 分布式 零配置 自动发现 索引自动
  • Linux 显示隐藏目录或隐藏文件的占用空间

    du sh du命令用来看文件size 是正则式 意思是第一位是点 第二位是除了点以外的字符 第三位是任意字符或者不存在 后面可以再加一个 来包括非隐藏文件 后面还可以接 sort h来对占用空间进行排序 sort 的 k2 可以指明根据第
  • vue + elementui 使用 dialog和form表单时数据渲染问题

    问题 dialog和form表单一起使用 关闭模态框再次点开出现上次数据依旧渲染在上面的问题 解决 加个v if 判断
  • python中以json格式输出log日志

    python中以json格式输出log日志 import json import logging import datetime import socket class HostIp host name None host ip None
  • 程序员都在用的IDE工具,JetBrains系列产品年中更新

    JetBrains是一家捷克的软件开发公司 该公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境IntelliJ IDEA 2019年8月 JetBrains进行了年中的第二次更新 本次更新将版本升级到了2019 2 预计
  • Mac电脑调用自带的命令行窗口

    前言 提示 我们都熟悉Windows电脑通过win r即可以快速启动命令行窗口 但是Mac电脑中如何实现调用命令行窗口呐 一 快捷键 command 空格 二 敲入te terinmal的缩写即可 这样就可以快速调出终端了
  • QT实现--电子时钟

    QT 电子时钟 文章目录 QT 电子时钟 简介 1 主窗口 menu h文件 menu cpp文件 2 时钟窗口 widget h文件 widget cpp文件 3 运行效果图 简介 使用了绘图事件 定时事件 有两个窗口 一个窗口用于设置时