溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2022-06-18 15:33:30 來源:億速云 閱讀:229 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Qt怎么實(shí)現(xiàn)電子時(shí)鐘的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    一、項(xiàng)目介紹

    利用Qt實(shí)現(xiàn)顯示與桌面上并可以隨意拖拽至桌面任意位置的電子時(shí)鐘案例。

    二、項(xiàng)目基本配置

    新建一個(gè)Qt案例,項(xiàng)目名稱為“Clock”,基類選擇“QDialog”,取消創(chuàng)建UI界面復(fù)選框的選中狀態(tài)。

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

    三、UI界面設(shè)計(jì)

    無UI界面

    四、主程序?qū)崿F(xiàn)

    4.1 添加新文件

    添加新文件:

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

    選擇“C++ Class”選項(xiàng),單擊“Choose”按鈕,選擇“Base class”文本框中輸入基類名“QLCDNumber”(手動(dòng)添加),在“Class name”文本框中輸入類的名稱“DigiClock”:

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

    4.2 digiclock.h頭文件

    代碼如下:

    #ifndef DIGICLOCK_H
    #define DIGICLOCK_H
    
    #include <QLCDNumber>
    
    class DigiClock : public QLCDNumber
    {
        Q_OBJECT
    public:
        DigiClock(QWidget *parent=0);
        void mousePressEvent(QMouseEvent *);
        void mouseMoveEvent(QMouseEvent *);
    
    public slots:
        void showTime();    //顯示當(dāng)前時(shí)間
    
    private:
        QPoint dragPosition;  //保存鼠標(biāo)點(diǎn)相對(duì)電子時(shí)鐘窗體左上角的偏移量
        bool showColon;       //用于顯示時(shí)間時(shí)是否顯示:
    };
    
    #endif // DIGICLOCK_H

    4.3 digiclock.cpp源文件

    首先,DigiClock類繼承自QLCDNumber類:

    DigiClock::DigiClock(QWidget *parent):QLCDNumber(parent)
    {
    //設(shè)置時(shí)鐘背景
    QPalette p=palette();//定義調(diào)色板對(duì)象
    p.setColor(QPalette::Window,Qt::blue);//設(shè)置背景顏色為藍(lán)色
    setPalette(p);//啟用調(diào)色板對(duì)象
    setWindowFlags(Qt::FramelessWindowHint);//生成無邊界窗口
    setWindowOpacity(0.5);//設(shè)置窗體透明度為0.5
    QTimer *timer=new QTimer(this);//新建定時(shí)器對(duì)象
    connect(timer,SIGNAL(timeout()),this,SLOT(showTime()));//連接定時(shí)器地timeout()信號(hào)與顯示時(shí)間的槽信號(hào)showTime()
    timer->start(1000);//啟動(dòng)定時(shí)器(每隔1000ms啟動(dòng)一次)
    showTime();//初始時(shí)間顯示
    resize(150,60);//設(shè)置電子時(shí)鐘顯示的尺寸
    showColon=true;//初始化
    
    }

    然后定義槽函數(shù)showTime(),完成電子鐘的顯示時(shí)間功能:

    //槽函數(shù)showTime()
    void DigiClock::showTime()
    {
        QTime time=QTime::currentTime();    //獲取當(dāng)前系統(tǒng)時(shí)間
        QString text=time.toString("hh:mm");//獲取的當(dāng)前時(shí)間轉(zhuǎn)換為字符串類型
        if(showColon)                        //控制:閃爍
        {
            text[2]=':';
            showColon=false;
        }
        else
        {
            text[2]=' ';
            showColon=true;
        }
        display(text);    //顯示轉(zhuǎn)換好的字符串時(shí)間
    }

    接著,定義鼠標(biāo)按下事件響應(yīng)函數(shù):

    //鼠標(biāo)按下事件響應(yīng)函數(shù)
    void DigiClock::mousePressEvent(QMouseEvent *event)
    {
        if(event->button()==Qt::LeftButton) //判斷按下鍵是否為鼠標(biāo)左鍵
        {
            //dragPosition=event->globalPos()-frameGeometry().topLeft();
            dragPosition=event->pos();//兩種方法
            //event->accept();//接收事件
        }
        if(event->button()==Qt::RightButton)    //若按下鍵為鼠標(biāo)右鍵
        {
            close();//退出
        }
    }

    定義鼠標(biāo)移動(dòng)事件響應(yīng)函數(shù),實(shí)現(xiàn)拖拽功能:

    //鼠標(biāo)移動(dòng)響應(yīng)函數(shù)
    void DigiClock::mouseMoveEvent(QMouseEvent *event)
    {
        if(event->buttons()&Qt::LeftButton)
        {
            move(event->globalPos()-dragPosition);
            //event->accept();//接收事件
        }
    }

    4.4 main.cpp源文件

    代碼如下:

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

    五、效果演示

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

    以上就是“Qt怎么實(shí)現(xiàn)電子時(shí)鐘”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    qt
    AI