首頁 > 軟體

Qt實現電子時鐘

2022-06-21 14:10:06

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

進一步認識Qt中的屬性,我們現在再做一個小練習,去實現一個簡易版電子時鐘的效果。

效果展示:

新建專案:

我們建立了lcdclock2類,其實是沒有用到的,實際上是新增新一個C++檔案來實現電子鐘。

新增C++檔案:

程式碼:

clock.h

#ifndef CLOCK_H
#define CLOCK_H
 
#include <QDialog>
 
class clock : public QDialog
{
    Q_OBJECT
 
public:
    clock(QWidget *parent = 0);
    ~clock();
};
 
#endif // CLOCK_H

這個clock檔案沒有啥用處,其實就是為了建立對話方塊存在的。

digitalclock.h

#ifndef DIGITALCLOCK_H
#define DIGITALCLOCK_H
#include<QLCDNumber>
 
class digitalclock : public QLCDNumber
{
    Q_OBJECT
public:
    digitalclock(QWidget* parent=0);
protected:
    void mousePressEvent(QMouseEvent* event);
    void mouseMoveEvent(QMouseEvent* event);
private slots:
    void showTime();
private:
    QPoint m_dragPosition;
    bool m_showColon;
};
 
#endif // DIGITALCLOCK_H

新增的digitalclock標頭檔案新增標頭檔案QLCDNumber,在新增元物件系統,這個是必要的。接著需要重寫滑鼠點選事件mousePressEvent還有mouseMoveEvent滑鼠移動事件。再寫一個槽函數用來顯示時間,就是將時間列印到對話方塊裡面。這裡有兩個私有變數一個是m_dragPosition用來儲存滑鼠點選點到視窗左上方的位置距離。另外有一個變數是bool型別 m_showColon用來儲存冒號出現的狀態,達到頻閃狀態。

clock.cpp

#include "clock.h"
 
clock::clock(QWidget *parent)
    : QDialog(parent)
{
}
 
clock::~clock()
{
 
}

digitalclock.cpp

#include "digitalclock.h"
#include<QMouseEvent>
#include<QDebug>
#include<QTime>
#include<QTimer>
digitalclock::digitalclock(QWidget* parent):QLCDNumber(parent)
{
 
    //設定藍色背景
    QPalette p=palette();//palette函數返回一個調色盤
    p.setColor(QPalette::Window,Qt::blue);
    setPalette(p);//將獲取的調色盤設定為表單的顏色
 
    //設定邊框格式
    setWindowFlags(Qt::FramelessWindowHint);
 
    //設定表單透明度
    setWindowOpacity(0.5);
 
    QTimer* timer=new QTimer(this);
    connect(timer,&QTimer::timeout,this,&digitalclock::showTime);
    timer->start(1000);//設定計時器週期
 
    showTime();
    resize(200,100);
    m_showColon=true;
}
 
void digitalclock::mousePressEvent(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton){
        m_dragPosition=event->globalPos()-frameGeometry().topLeft();
        qDebug()<<"全域性座標:"<<event->globalPos();
        qDebug()<<"左上角座標"<<frameGeometry().topLeft();
        event->accept();
    }else{
        close();//關閉視窗
 
    }
 
}
 
void digitalclock::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons()==Qt::LeftButton){
 
        move(event->globalPos()-m_dragPosition);
        //移動電子時鐘,move函數實際是根據視窗左上角為焦點來移動,如果不減去滑鼠和左上角的偏移值,視窗會自動偏移
 
        event->accept();
    }
 
}
 
void digitalclock::showTime()
{
    QTime time=QTime::currentTime();//定義一個時間物件,獲取當前的時間
    QString strTime=time.toString("hh:mm");//將時間轉為字串,並且指定格式
    if(m_showColon){
        strTime[2]=':';
    }else{
        strTime[2]=' ';
    }
    display(strTime);
    m_showColon=!m_showColon;//將冒號的顯示狀態設定為與之前想反,這樣就達到頻閃的樣子
 
}

建構函式:

首先定義一個調色盤物件,利用palette()函數返回一個調色盤。在利用調色盤的函數setColror(顏色型別,顏色);設定表單風格函數用到setWIndowFlags();設定表單透明度函數是setWIndowOpacity函數。緊接著再定義一個計時器QTimer.再將計時器與showTIme槽函數聯絡起來,每當計時器的時間到的時候就呼叫槽函數,之後再利用resize函數將視窗的大小重新設定。首先將冒號顯示狀態設定為真。

滑鼠點選函數mousePreessEvent函數:

首先判斷滑鼠是否為左鍵點選,如果是那就將滑鼠點選的點和視窗左上角點的距離計算出來,儲存在m_dragposition。每次到函數結尾的時候一定要帶上event.accept接受函數修改。

滑鼠移動事件mouseMoveEvent函數:

首先判斷滑鼠左鍵是否被點選,因為通常的情況下,滑鼠的移動是按左鍵拖動的,move函數實際是以視窗的左上方為焦點的,如果我們單純傳滑鼠的全域性座標,那這樣視窗的左上方會跳動到滑鼠的點選點。這樣就不好看,所以在傳進座標的時候,就是傳滑鼠點選的點減去視窗左上方相對於滑鼠按下的偏移位置。

時間顯示函數showTIme函數:

時間顯示函數就是定義一個時間物件,利用QTime::Current函數獲取當前的時間。在將時間轉成指定的格式字串,緊接著判斷冒號的顯示狀態,將冒號根據狀態設定有無。顯示時間真正的函數是display函數,將時間字串列印到視窗內。之後再將冒號狀態取反,達到每個一秒頻閃。

mian.cpp

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

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


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