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

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

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

鬧鐘效果

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

1.鬧鐘設置

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

2.提醒功能

語音播報:當?shù)竭_設定的鬧鐘時間,從 QPlainTextEdit 獲取文本,利用 QTextToSpeech 進行語音播報。

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

3.控制操作

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

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

完整代碼

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

    }
}

學習筆記

QObject::event

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

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

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

函數(shù)返回值:bool類型。如果事件被成功處理,返回true;若未處理或需要進一步處理,則返回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ù)。當檢測到鼠標按下事件時,輸出相應信息并返回true,表示事件已處理;否則,調(diào)用父類的event函數(shù)繼續(xù)處理事件。

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

mousePressEvent

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

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

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

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

主要函數(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ù)按下的鼠標按鍵不同,輸出相應的位置信息。

mouseReleaseEvent

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

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

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

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

主要函數(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中記錄鼠標按下的位置,在mouseReleaseEvent中計算鼠標拖動的距離并輸出。

mouseDoubleClickEvent

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

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

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

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

主要函數(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();
        }
    }
};

在這個示例中,當鼠標左鍵在MyWidget上雙擊時,輸出雙擊的位置信息。

mouseMoveEvent

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

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

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

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

主要函數(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();
        }
    }
};

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

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

keyPressEvent

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

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

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

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

主要函數(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ù)按下的不同按鍵輸出相應信息。

keyReleaseEvent

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

函數(shù)功能:當鍵盤按鍵被釋放時被調(diào)用。可用于處理與按鍵釋放相關的邏輯,如在一些需要長按按鍵觸發(fā)特殊功能的場景中,按鍵釋放時結束該功能。

函數(shù)參數(shù):QKeyEvent *event,包含按鍵釋放事件的詳細信息,與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鍵釋放時輸出相應信息。

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

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

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

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

函數(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ù)中處理定時器超時事件,輸出當前時間。

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

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

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

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

函數(shù)返回值:void,主要負責執(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在窗口中繪制了文本和矩形。

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

相關文章

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

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

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

    C++右值引用與移動構造函數(shù)基礎與應用詳解

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

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

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

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

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

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

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

    C++ Boost MPI接口詳細講解

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

    C++設計模式之模板方法模式

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

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

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

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

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

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

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

最新評論

鄂伦春自治旗| 个旧市| 华安县| 秀山| 白河县| 腾冲县| 隆子县| 肥西县| 黎川县| 长垣县| 六枝特区| 莱阳市| 湖南省| 泗洪县| 牙克石市| 临沭县| 青冈县| 东明县| 晋城| 习水县| 东安县| 湟中县| 将乐县| 侯马市| 福州市| 健康| 临桂县| 偃师市| 镇原县| 西吉县| 乌兰察布市| 呼图壁县| 黄冈市| 安远县| 红安县| 定日县| 尼玛县| 织金县| 阜平县| 灵山县| 逊克县|