Qt项目-电子时钟

简介:

1.主窗口

menu.h文件:

#ifndef MENU_H
#define MENU_H

#include 
#include 
#include 

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 
#include 
#include 

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 
#include   //绘图事件
#include 

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 
#include 

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() <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.运行效果图


点击领取Qt学习资料+视频教程~「链接」

展开阅读全文

页面更新:2024-03-07

标签:时钟   分针   秒针   原位   钟表   信号   窗口   事件   文件   时间   项目   电子

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top