首頁 > 軟體

QT5實現電子時鐘

2022-06-21 14:10:33

本文範例為大家分享了QT5實現電子時鐘的具體程式碼,供大家參考,具體內容如下

一、電子時鐘的顯示

效果如下:

電子時鐘顯示

二、新建工程

Widgets Application專案名位clock,基礎類位QDialog,取消建立UI介面的勾選框,專案名右擊新增新檔案

在彈出的對話方塊中選擇“C++ Class”,Base class基礎類名“QLCDNumber”,class name命名為digiclock,點選完成。

三、編輯digiclock.h檔案

#ifndef DIGICLOCK_H
#define DIGICLOCK_H
#include <QLCDNumber>
 
class DigiClock : public QLCDNumber
{
public:
    DigiClock(QWidget *parent=0);
    void mousePressEvent(QMouseEvent *);
    void mouseMoveEvent(QMouseEvent *);
private slots:
    void showTime();//顯示槽函數
 
private:
    QPoint dragPosition;//相對位置偏移
    bool showColon;//是否顯示「:」
    QTimer *mtimer;
};
 
#endif // DIGICLOCK_H

四、編輯digiclock.cpp檔案

#include "digiclock.h"
#include <QTime>
#include <QTimer>
#include <QMouseEvent>
#include <QDebug>
 
DigiClock::DigiClock(QWidget *parent):QLCDNumber(parent)
{
    QPalette p = palette();//
    p.setColor(QPalette::Window,Qt::blue);
    setPalette(p);//設定表單顏色
    setWindowFlags(Qt::FramelessWindowHint);//表單設定位無邊框
    setWindowOpacity(0.5);//設定透明度
    mtimer = new QTimer(this);//new 定時器物件
    //下列方法1不可以定時
    //connect(mtimer,SIGNAL(timeout()),this,SLOT(showTime()));
    //下列方法2可以實現定時
    connect(mtimer,&QTimer::timeout,[=](){showTime();});   
    if(mtimer->isActive()==false)//定時器檢查啟用狀態
    {
    mtimer->start(1000);//啟動
    }
    showTime();//槽函數
    resize(300,60);
    showColon=true;
}
void DigiClock::showTime()
{
    QTime time1 = QTime::currentTime();//獲取當前時間
    QString text = time1.toString("hh:mm:ss");
    this->setDigitCount(8);//設定顯示長度
 
    if(showColon)
    {
        text[2]=':';
        text[5]=':';
        showColon=false;
    }else
    {
        text[2]=' ';
        text[5]=' ';
        showColon=true;
    }
     //qDebug()<<text;
     display(text);
}
void DigiClock::mousePressEvent(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton)
    {
        //獲取移動參考點
        dragPosition=event->globalPos()-frameGeometry().topLeft();
        event->accept();
    }
    if(event->button()==Qt::RightButton)
    {
        close();
    }
}
void DigiClock::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons()&Qt::LeftButton)
    {
        move(event->globalPos()-dragPosition);//拖拽移動
        event->accept();
    }
}

五、編輯主函數

#include "dialog.h"
 
#include <QApplication>
#include "digiclock.h"
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    DigiClock w;
    w.show();
    return a.exec();
}

六、總結

偵錯方法1時,connect(mtimer,SIGNAL(timeout()),this,SLOT(showTime()));不能實現定時的效果,糾結了好一陣,還是沒發現問題,可能時QT書寫形式更新了?

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com