最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt實(shí)現(xiàn)電子時鐘

 更新時間:2022年06月21日 11:04:54   作者:PureヾChan  
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)電子時鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

效果展示:

新建項(xiàng)目:

我們創(chuàng)建了lcdclock2類,其實(shí)是沒有用到的,實(shí)際上是添加新一個C++文件來實(shí)現(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文件沒有啥用處,其實(shí)就是為了創(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),這個是必要的。接著需要重寫鼠標(biāo)點(diǎn)擊事件mousePressEvent還有mouseMoveEvent鼠標(biāo)移動事件。再寫一個槽函數(shù)用來顯示時間,就是將時間打印到對話框里面。這里有兩個私有變量一個是m_dragPosition用來保存鼠標(biāo)點(diǎn)擊點(diǎn)到窗口左上方的位置距離。另外有一個變量是bool類型 m_showColon用來保存冒號出現(xiàn)的狀態(tài),達(dá)到頻閃狀態(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è)置藍(lán)色背景
? ? 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è)置計(jì)時器周期
?
? ? showTime();
? ? resize(200,100);
? ? m_showColon=true;
}
?
void digitalclock::mousePressEvent(QMouseEvent *event)
{
? ? if(event->button()==Qt::LeftButton){
? ? ? ? m_dragPosition=event->globalPos()-frameGeometry().topLeft();
? ? ? ? qDebug()<<"全局坐標(biāo):"<<event->globalPos();
? ? ? ? qDebug()<<"左上角坐標(biāo)"<<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ù)實(shí)際是根據(jù)窗口左上角為焦點(diǎn)來移動,如果不減去鼠標(biāo)和左上角的偏移值,窗口會自動偏移
?
? ? ? ? event->accept();
? ? }
?
}
?
void digitalclock::showTime()
{
? ? QTime time=QTime::currentTime();//定義一個時間對象,獲取當(dāng)前的時間
? ? 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è)置為與之前想反,這樣就達(dá)到頻閃的樣子
?
}

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

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

鼠標(biāo)點(diǎn)擊函數(shù)mousePreessEvent函數(shù):

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

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

首先判斷鼠標(biāo)左鍵是否被點(diǎn)擊,因?yàn)橥ǔ5那闆r下,鼠標(biāo)的移動是按左鍵拖動的,move函數(shù)實(shí)際是以窗口的左上方為焦點(diǎn)的,如果我們單純傳鼠標(biāo)的全局坐標(biāo),那這樣窗口的左上方會跳動到鼠標(biāo)的點(diǎn)擊點(diǎn)。這樣就不好看,所以在傳進(jìn)坐標(biāo)的時候,就是傳鼠標(biāo)點(diǎn)擊的點(diǎn)減去窗口左上方相對于鼠標(biāo)按下的偏移位置。

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

南木林县| 信阳市| 平和县| 潼南县| 伊宁县| 萍乡市| 丰顺县| 昭通市| 九龙城区| 方山县| 新巴尔虎右旗| 商水县| 宁夏| 武宁县| 嘉善县| 徐汇区| 青浦区| 广南县| 武安市| 虎林市| 石屏县| 民丰县| 探索| 娄底市| 黔江区| 黎城县| 罗田县| 大关县| 弥渡县| 石棉县| 麻江县| 图片| 湘西| 枝江市| 麻江县| 海南省| 县级市| 易门县| 邵阳市| 玉环县| 长宁区|