QT--電子時鍾


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.運行效果圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM