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

基于QT實現(xiàn)簡單的鬧鐘

 更新時間:2025年02月14日 09:36:12   作者:Xiezequan  
這篇文章主要為大家詳細(xì)介紹了如何基于QT實現(xiàn)一個簡單的鬧鐘小程序,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,有需要的小伙伴可以參考一下

鬧鐘效果

時鐘顯示 通過 QTimer 每秒更新一次 QLCDNumber 顯示的當(dāng)前時間,格式為 hh:mm:ss,實現(xiàn)實時時鐘顯示。

1.鬧鐘設(shè)置

使用 QDateTimeEdit 讓用戶設(shè)置鬧鐘時間,可通過日歷選擇日期,設(shè)置范圍為當(dāng)前時間到未來 10 天。

2.提醒功能

語音播報:當(dāng)?shù)竭_(dá)設(shè)定的鬧鐘時間,從 QPlainTextEdit 獲取文本,利用 QTextToSpeech 進(jìn)行語音播報。

音效播放:同時,使用 QMediaPlayer 播放指定的提醒音效文件 123.mp3,音量設(shè)為 80。

3.控制操作

啟動鬧鐘:點擊“啟動”按鈕,開啟定時器進(jìn)行時間檢查,此時“啟動”按鈕禁用,“停止”按鈕啟用。

停止鬧鐘:點擊“停止”按鈕,停止定時器和音效播放,“啟動”按鈕重新啟用,“停止”按鈕禁用。

完整代碼

#include "widget.h"
#include "ui_widget.h"
#include<QTime>
#include<QDateTime>
#include<QTextToSpeech>
#include<QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //創(chuàng)建時鐘
    timerTime=new QTimer(this);
    timerClock=new QTimer(this);
    //綁定時鐘函數(shù)
    connect(timerTime,&QTimer::timeout,this,&Widget::timeSlot);
    connect(timerClock,&QTimer::timeout,this,&Widget::clockSlot);
    //時鐘直接啟動
    timerTime->start(1000);
    ui->timeLCD->setDigitCount(8);
    ui->dateTimeEdit->setCalendarPopup(true);
    ui->dateTimeEdit->setMinimumDateTime(QDateTime::currentDateTime());
    ui->dateTimeEdit->setMaximumDate(QDate::currentDate().addDays(10));
    ui->dateTimeEdit->setDisplayFormat("yyyy-MM-dd hh:mm:ss");
     speech=new QTextToSpeech(this);
     startSound=new QMediaPlayer(this);
       startSound->setMedia(QUrl("qrc:/new/prefix1/123.mp3"));
       startSound->setVolume(80);  //音量


}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_startBtn_clicked()
{

        //計時器啟動
        this->timerClock->start(1000);
        ui->startBtn->setEnabled(false);
        ui->endBtn->setEnabled(true);

}

void Widget::on_endBtn_clicked()
{
// 取消
    this->timerClock->stop();
    startSound->stop();
    ui->startBtn->setEnabled(true);
    ui->endBtn->setEnabled(false);
}
//時鐘增加函數(shù)
void Widget::timeSlot()
{
    QTime time;
    ui->timeLCD->display(time.currentTime().toString("hh:mm:ss"));
}
//鬧鐘函數(shù)
void Widget::clockSlot()
{

    QDateTime dt=ui->dateTimeEdit->dateTime();

//    QDateTime now;

    if(dt.secsTo(QDateTime::currentDateTime())==0){
        //播報
        QString text=ui->plainTextEdit->toPlainText();
        speech->say(text);
        ui->startBtn->setEnabled(true);

        timerClock->stop();
         startSound->play();

    }
}

學(xué)習(xí)筆記

QObject::event

函數(shù)名:bool QObject::event(QEvent *e)

函數(shù)功能:這是Qt事件處理的入口函數(shù)。當(dāng)一個事件發(fā)生時,首先會調(diào)用該函數(shù)。它會根據(jù)傳入的事件對象e,識別事件類型,然后進(jìn)行初步處理或分發(fā)到更具體的事件處理函數(shù)。比如,它可以判斷事件是鼠標(biāo)事件、鍵盤事件還是其他類型事件,進(jìn)而決定后續(xù)處理流程。

函數(shù)參數(shù):QEvent *e,這是一個指向QEvent對象的指針。QEvent是所有事件類的基類,通過它可以獲取事件的詳細(xì)信息,如事件類型、發(fā)生時間等。

函數(shù)返回值:bool類型。如果事件被成功處理,返回true;若未處理或需要進(jìn)一步處理,則返回false。返回值會影響事件的后續(xù)傳遞,如果返回false,事件可能會繼續(xù)向上傳遞給父對象處理。

主要函數(shù)舉例:

class MyObject : public QObject {
    Q_OBJECT
public:
    bool event(QEvent *e) override {
        if (e->type() == QEvent::MouseButtonPress) {
            qDebug() << "Mouse button pressed event caught in event()";
            return true;
        }
        return QObject::event(e);
    }
};

在這個例子中,MyObject類繼承自QObject并重寫了event函數(shù)。當(dāng)檢測到鼠標(biāo)按下事件時,輸出相應(yīng)信息并返回true,表示事件已處理;否則,調(diào)用父類的event函數(shù)繼續(xù)處理事件。

QWidget的鼠標(biāo)事件處理函數(shù)

mousePressEvent

函數(shù)名:void QWidget::mousePressEvent(QMouseEvent *event)

函數(shù)功能:當(dāng)鼠標(biāo)按鍵在部件上按下時被調(diào)用。常用于記錄鼠標(biāo)按下的位置,為后續(xù)的繪圖、拖曳等操作做準(zhǔn)備。

函數(shù)參數(shù):QMouseEvent *event,通過它可以獲取鼠標(biāo)事件的詳細(xì)信息,包括按下的是哪個鼠標(biāo)按鍵(如Qt::LeftButton、Qt::RightButton等),鼠標(biāo)在部件上的位置(相對于部件的坐標(biāo)pos())以及在屏幕上的全局坐標(biāo)(globalPos())等。

函數(shù)返回值:void,沒有返回值,專注于處理鼠標(biāo)按下事件的相關(guān)邏輯。

主要函數(shù)舉例:

class MyWidget : public QWidget {
    Q_OBJECT
public:
    void mousePressEvent(QMouseEvent *event) override {
        if (event->button() == Qt::LeftButton) {
            qDebug() << "Left mouse button pressed at local position:" << event->pos();
        } else if (event->button() == Qt::RightButton) {
            qDebug() << "Right mouse button pressed at global position:" << event->globalPos();
        }
    }
};

在這個示例中,MyWidget類重寫了mousePressEvent函數(shù),根據(jù)按下的鼠標(biāo)按鍵不同,輸出相應(yīng)的位置信息。

mouseReleaseEvent

函數(shù)名:void QWidget::mouseReleaseEvent(QMouseEvent *event)

函數(shù)功能:在鼠標(biāo)按鍵在部件上釋放時被調(diào)用。常與mousePressEvent配合使用,完成一些與鼠標(biāo)操作相關(guān)的功能,比如在繪圖應(yīng)用中,鼠標(biāo)按下時開始繪制,釋放時結(jié)束繪制。

函數(shù)參數(shù):QMouseEvent *event,包含鼠標(biāo)釋放事件的詳細(xì)信息,與mousePressEvent中的參數(shù)類似。

函數(shù)返回值:void,沒有返回值,主要用于處理鼠標(biāo)釋放后的相關(guān)操作。

主要函數(shù)舉例:

class MyWidget : public QWidget {
    Q_OBJECT
    QPoint pressPos;
public:
    void mousePressEvent(QMouseEvent *event) override {
        if (event->button() == Qt::LeftButton) {
            pressPos = event->pos();
        }
    }
    void mouseReleaseEvent(QMouseEvent *event) override {
        if (event->button() == Qt::LeftButton) {
            QPoint releasePos = event->pos();
            int distance = (releasePos - pressPos).manhattanLength();
            qDebug() << "Mouse dragged for a distance of:" << distance;
        }
    }
};

此例中,MyWidget類在mousePressEvent中記錄鼠標(biāo)按下的位置,在mouseReleaseEvent中計算鼠標(biāo)拖動的距離并輸出。

mouseDoubleClickEvent

函數(shù)名:void QWidget::mouseDoubleClickEvent(QMouseEvent *event)

函數(shù)功能:當(dāng)鼠標(biāo)在部件上雙擊時被調(diào)用。通常用于實現(xiàn)一些特殊的交互功能,如雙擊打開文件、放大視圖等。

函數(shù)參數(shù):QMouseEvent *event,可獲取雙擊事件的相關(guān)信息,如雙擊的位置、按鍵等。

函數(shù)返回值:void,沒有返回值,用于執(zhí)行雙擊事件對應(yīng)的操作。

主要函數(shù)舉例:

class MyWidget : public QWidget {
    Q_OBJECT
public:
    void mouseDoubleClickEvent(QMouseEvent *event) override {
        if (event->button() == Qt::LeftButton) {
            qDebug() << "Left mouse button double - clicked at:" << event->pos();
        }
    }
};

在這個示例中,當(dāng)鼠標(biāo)左鍵在MyWidget上雙擊時,輸出雙擊的位置信息。

mouseMoveEvent

函數(shù)名:void QWidget::mouseMoveEvent(QMouseEvent *event)

函數(shù)功能:當(dāng)鼠標(biāo)在部件上移動時被調(diào)用。常用于實現(xiàn)實時響應(yīng)鼠標(biāo)移動的功能,如在繪圖軟件中實時繪制線條,或在游戲中根據(jù)鼠標(biāo)移動控制角色方向。

函數(shù)參數(shù):QMouseEvent *event,通過它可以獲取鼠標(biāo)移動的詳細(xì)信息,包括當(dāng)前鼠標(biāo)位置(pos())、移動過程中按下的按鍵(buttons())等。

函數(shù)返回值:void,沒有返回值,專注于處理鼠標(biāo)移動相關(guān)邏輯。

主要函數(shù)舉例:

class MyWidget : public QWidget {
    Q_OBJECT
public:
    void mouseMoveEvent(QMouseEvent *event) override {
        if (event->buttons() & Qt::LeftButton) {
            qDebug() << "Mouse is being dragged with left button at:" << event->pos();
        }
    }
};

在這個例子中,當(dāng)鼠標(biāo)左鍵被按下并移動時,輸出鼠標(biāo)的當(dāng)前位置信息。

QWidget的鍵盤事件處理函數(shù)

keyPressEvent

函數(shù)名:void QWidget::keyPressEvent(QKeyEvent *event)

函數(shù)功能:在鍵盤按鍵被按下時被調(diào)用。常用于實現(xiàn)各種鍵盤控制功能,如在游戲中通過鍵盤控制角色移動,在文本編輯器中處理按鍵輸入等。

函數(shù)參數(shù):QKeyEvent *event,通過它可以獲取按下按鍵的詳細(xì)信息,如按鍵的鍵值(key(),用于識別具體按鍵)、本次事件中使用的鍵的個數(shù)(count())以及鍵上的文本內(nèi)容(text())等。

函數(shù)返回值:void,沒有返回值,主要用于執(zhí)行鍵盤按下事件對應(yīng)的操作。

主要函數(shù)舉例:

class MyWidget : public QWidget {
    Q_OBJECT
public:
    void keyPressEvent(QKeyEvent *event) override {
        if (event->key() == Qt::Key_A) {
            qDebug() << "The 'A' key was pressed";
        } else if (event->key() == Qt::Key_Up) {
            qDebug() << "The up arrow key was pressed";
        }
    }
};

在此例中,MyWidget類重寫了keyPressEvent函數(shù),根據(jù)按下的不同按鍵輸出相應(yīng)信息。

keyReleaseEvent

函數(shù)名:void QWidget::keyReleaseEvent(QKeyEvent *event)

函數(shù)功能:當(dāng)鍵盤按鍵被釋放時被調(diào)用??捎糜谔幚砼c按鍵釋放相關(guān)的邏輯,如在一些需要長按按鍵觸發(fā)特殊功能的場景中,按鍵釋放時結(jié)束該功能。

函數(shù)參數(shù):QKeyEvent *event,包含按鍵釋放事件的詳細(xì)信息,與keyPressEvent中的參數(shù)類似。

函數(shù)返回值:void,沒有返回值,專注于處理按鍵釋放后的操作。

主要函數(shù)舉例:

class MyWidget : public QWidget {
    Q_OBJECT
    bool isCtrlPressed = false;
public:
    void keyPressEvent(QKeyEvent *event) override {
        if (event->key() == Qt::Key_Control) {
            isCtrlPressed = true;
        }
    }
    void keyReleaseEvent(QKeyEvent *event) override {
        if (event->key() == Qt::Key_Control) {
            isCtrlPressed = false;
            qDebug() << "Ctrl key released";
        }
    }
};

在這個示例中,MyWidget類通過keyPressEvent和keyReleaseEvent函數(shù)記錄Ctrl鍵的按下和釋放狀態(tài),并在Ctrl鍵釋放時輸出相應(yīng)信息。

QWidget的定時器事件處理函數(shù)

函數(shù)名:void QWidget::timerEvent(QTimerEvent *event)

函數(shù)功能:當(dāng)定時器超時時被調(diào)用。在基于事件處理函數(shù)版本的定時器實現(xiàn)中,通過重寫該函數(shù)來定義定時器超時后執(zhí)行的操作,比如定時更新界面顯示的時間、定時檢查網(wǎng)絡(luò)連接狀態(tài)等。

函數(shù)參數(shù):QTimerEvent *event,通過它可以獲取定時器的相關(guān)信息,如定時器的ID號(timerId()),用于區(qū)分不同的定時器(當(dāng)存在多個定時器時)。

函數(shù)返回值:void,沒有返回值,主要用于執(zhí)行定時器超時后的操作。

主要函數(shù)舉例:

class MyWidget : public QWidget {
    Q_OBJECT
    int timerId;
public:
    MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
        timerId = startTimer(1000); // 啟動一個每秒觸發(fā)一次的定時器
    }
    void timerEvent(QTimerEvent *event) override {
        if (event->timerId() == timerId) {
            qDebug() << "Timer timeout. Current time:" << QTime::currentTime();
        }
    }
};

在這個例子中,MyWidget類啟動了一個定時器,并在timerEvent函數(shù)中處理定時器超時事件,輸出當(dāng)前時間。

QWidget的繪制事件處理函數(shù)

函數(shù)名:void QWidget::paintEvent(QPaintEvent *event)

函數(shù)功能:用于處理繪制事件,當(dāng)窗口需要重新繪制時(如窗口大小改變、最小化后恢復(fù)、主動調(diào)用repaint或update函數(shù)等情況),該函數(shù)會被自動調(diào)用。通常在這個函數(shù)中使用QPainter類進(jìn)行各種圖形繪制操作,如繪制文本、矩形、橢圓等。

函數(shù)參數(shù):QPaintEvent *event,包含了繪制事件的相關(guān)信息,雖然在實際繪制操作中可能較少直接使用,但它是繪制事件的標(biāo)識。

函數(shù)返回值:void,主要負(fù)責(zé)執(zhí)行繪制操作,沒有返回值。

主要函數(shù)舉例:

class MyWidget : public QWidget {
    Q_OBJECT
public:
    void paintEvent(QPaintEvent *event) override {
        QPainter painter(this);
        painter.setPen(Qt::blue);
        painter.setFont(QFont("Arial", 20));
        painter.drawText(rect(), Qt::AlignCenter, "Hello, Qt!");
        painter.drawRect(10, 10, width() - 20, height() - 20);
    }
};

在這個示例中,MyWidget類重寫了paintEvent函數(shù),使用QPainter在窗口中繪制了文本和矩形。

到此這篇關(guān)于基于QT實現(xiàn)簡單的鬧鐘的文章就介紹到這了,更多相關(guān)QT鬧鐘內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入解析C++編程中的純虛函數(shù)和抽象類

    深入解析C++編程中的純虛函數(shù)和抽象類

    這篇文章主要介紹了深入解析C++編程中的純虛函數(shù)和抽象類,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++右值引用與移動構(gòu)造函數(shù)基礎(chǔ)與應(yīng)用詳解

    C++右值引用與移動構(gòu)造函數(shù)基礎(chǔ)與應(yīng)用詳解

    左值和右值都是針對表達(dá)式,左值是指表達(dá)式結(jié)束后依然存在的持久對象,右值是指表達(dá)式結(jié)束時就不再存在的臨時對象,下面這篇文章主要給大家介紹了關(guān)于C++11右值引用和移動語義的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • VC中CWinThread類以及和createthread API的區(qū)別分析

    VC中CWinThread類以及和createthread API的區(qū)別分析

    這篇文章主要介紹了VC中CWinThread類以及和createthread API的區(qū)別分析,較為詳細(xì)的講述了CWinThread類的原理,并以實例形式對AfxBeginThread函數(shù)的內(nèi)部實現(xiàn)進(jìn)行了解釋說明,需要的朋友可以參考下
    2014-10-10
  • C語言判斷字符串是否以str2開頭代碼

    C語言判斷字符串是否以str2開頭代碼

    這里給大家分享的是一個使用C語言實現(xiàn)的判斷字符串中是否以某字符開頭或者結(jié)尾的代碼,非常的簡單實用,希望大家能夠喜歡
    2017-05-05
  • 一起來學(xué)習(xí)C++的函數(shù)指針和函數(shù)對象

    一起來學(xué)習(xí)C++的函數(shù)指針和函數(shù)對象

    這篇文章主要為大家詳細(xì)介紹了C++函數(shù)指針和函數(shù)對象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++ Boost MPI接口詳細(xì)講解

    C++ Boost MPI接口詳細(xì)講解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • C++設(shè)計模式之模板方法模式

    C++設(shè)計模式之模板方法模式

    這篇文章主要介紹了C++設(shè)計模式之模板方法模式,本文講解了什么是模板方法模式、模板方法模式的UML類圖、模板方法模式的使用場合等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • c++從函數(shù)返回數(shù)組的方法代碼

    c++從函數(shù)返回數(shù)組的方法代碼

    在本篇文章里小編給大家整理的是關(guān)于c++從函數(shù)返回數(shù)組的方法代碼,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • C語言基礎(chǔ)之C語言格式化輸出函數(shù)printf詳解

    C語言基礎(chǔ)之C語言格式化輸出函數(shù)printf詳解

    這篇文章主要介紹了C語言格式化輸出函數(shù)printf詳解,printf函數(shù)中用到的格式字符與printf函數(shù)中用到的格式修飾符,感興趣的小伙伴可以借鑒一下
    2023-03-03
  • C語言控制臺實現(xiàn)字符飛機(jī)大戰(zhàn)

    C語言控制臺實現(xiàn)字符飛機(jī)大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了C語言控制臺實現(xiàn)字符飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12

最新評論

彭州市| 霍州市| 佛学| 鹰潭市| 双流县| 临桂县| 东平县| 文化| 洛川县| 沂南县| 霍邱县| 广水市| 曲阳县| 莱芜市| 内黄县| 弥渡县| 丰顺县| 平昌县| 兴仁县| 兴海县| 龙门县| 宁波市| 含山县| 胶南市| 乳山市| 银川市| 武山县| 博兴县| 乌什县| 岐山县| 闸北区| 泽州县| 吴堡县| 乡城县| 黄大仙区| 武威市| 柳林县| 八宿县| 维西| 大厂| 砚山县|