日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

Qt實現(xiàn)電子時鐘_C 語言

作者:PureヾChan ? 更新時間: 2022-08-12 編程語言

本文實例為大家分享了Qt實現(xiàn)電子時鐘的具體代碼,供大家參考,具體內(nèi)容如下

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

效果展示:

新建項目:

我們創(chuàng)建了lcdclock2類,其實是沒有用到的,實際上是添加新一個C++文件來實現(xiàn)電子鐘。

添加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文件沒有啥用處,其實就是為了創(chuàng)建對話框存在的。

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,在添加元對象系統(tǒng),這個是必要的。接著需要重寫鼠標點擊事件mousePressEvent還有mouseMoveEvent鼠標移動事件。再寫一個槽函數(shù)用來顯示時間,就是將時間打印到對話框里面。這里有兩個私有變量一個是m_dragPosition用來保存鼠標點擊點到窗口左上方的位置距離。另外有一個變量是bool類型 m_showColon用來保存冒號出現(xiàn)的狀態(tài),達到頻閃狀態(tài)。

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)
{
?
? ? //設(shè)置藍色背景
? ? QPalette p=palette();//palette函數(shù)返回一個調(diào)色板
? ? p.setColor(QPalette::Window,Qt::blue);
? ? setPalette(p);//將獲取的調(diào)色板設(shè)置為窗體的顏色
?
? ? //設(shè)置邊框格式
? ? setWindowFlags(Qt::FramelessWindowHint);
?
? ? //設(shè)置窗體透明度
? ? setWindowOpacity(0.5);
?
? ? QTimer* timer=new QTimer(this);
? ? connect(timer,&QTimer::timeout,this,&digitalclock::showTime);
? ? timer->start(1000);//設(shè)置計時器周期
?
? ? 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();//關(guān)閉窗口
?
? ? }
?
}
?
void digitalclock::mouseMoveEvent(QMouseEvent *event)
{
? ? if(event->buttons()==Qt::LeftButton){
?
? ? ? ? move(event->globalPos()-m_dragPosition);
? ? ? ? //移動電子時鐘,move函數(shù)實際是根據(jù)窗口左上角為焦點來移動,如果不減去鼠標和左上角的偏移值,窗口會自動偏移
?
? ? ? ? event->accept();
? ? }
?
}
?
void digitalclock::showTime()
{
? ? QTime time=QTime::currentTime();//定義一個時間對象,獲取當前的時間
? ? QString strTime=time.toString("hh:mm");//將時間轉(zhuǎn)為字符串,并且指定格式
? ? if(m_showColon){
? ? ? ? strTime[2]=':';
? ? }else{
? ? ? ? strTime[2]=' ';
? ? }
? ? display(strTime);
? ? m_showColon=!m_showColon;//將冒號的顯示狀態(tài)設(shè)置為與之前想反,這樣就達到頻閃的樣子
?
}

構(gòu)造函數(shù):

首先定義一個調(diào)色板對象,利用palette()函數(shù)返回一個調(diào)色板。在利用調(diào)色板的函數(shù)setColror(顏色類型,顏色);設(shè)置窗體風格函數(shù)用到setWIndowFlags();設(shè)置窗體透明度函數(shù)是setWIndowOpacity函數(shù)。緊接著再定義一個計時器QTimer.再將計時器與showTIme槽函數(shù)聯(lián)系起來,每當計時器的時間到的時候就調(diào)用槽函數(shù),之后再利用resize函數(shù)將窗口的大小重新設(shè)置。首先將冒號顯示狀態(tài)設(shè)置為真。

鼠標點擊函數(shù)mousePreessEvent函數(shù):

首先判斷鼠標是否為左鍵點擊,如果是那就將鼠標點擊的點和窗口左上角點的距離計算出來,保存在m_dragposition。每次到函數(shù)結(jié)尾的時候一定要帶上event.accept接受函數(shù)修改。

鼠標移動事件mouseMoveEvent函數(shù):

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

時間顯示函數(shù)showTIme函數(shù):

時間顯示函數(shù)就是定義一個時間對象,利用QTime::Current函數(shù)獲取當前的時間。在將時間轉(zhuǎn)成指定的格式字符串,緊接著判斷冒號的顯示狀態(tài),將冒號根據(jù)狀態(tài)設(shè)置有無。顯示時間真正的函數(shù)是display函數(shù),將時間字符串打印到窗口內(nèi)。之后再將冒號狀態(tài)取反,達到每個一秒頻閃。

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();
}

原文鏈接:https://blog.csdn.net/qq_45775342/article/details/108154603

欄目分類
最近更新