【QT】一个简易的闹钟

主要用了一些样式设置指令,QT的定时器事件机制,QTime类的基本使用方法。

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QIcon>
#include <QTime>
#include <QDebug>
#include <QMessageBox>
#include <QStringList>
#include <QTextToSpeech>
#include <QTextEdit>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void timerEvent(QTimerEvent *event);
    int id;//定义定时器id
    int id1;//基础显示器
    bool isSpeech;//是否开始阅读
    QString setTimeStr;//闹钟设定的时刻
    bool IsSetTime;//是否设定了闹钟

    //定义阅读者
    QTextToSpeech *speecher;


private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    ,IsSetTime(false)
    ,speecher(new QTextToSpeech(this))
    , ui(new Ui::Widget)  
{
    ui->setupUi(this);
    //设置纯洁 窗口、
    //this->setWindowFlag(Qt::FramelessWindowHint);
    //this->showMaximized();//最大化显示
    this->setWindowTitle("闹钟朗读者");
    this->setWindowIcon(QIcon(":/img/tu1.png"));
    //固定窗口大小
    this->setFixedSize(1018,569);
    ui->frame_1->move(0,0);
    ui->frame_1->resize(this->size());
    ui->frame_1->setStyleSheet("QFrame#frame_1{border-image:url(:/img/tu1.png)}");
    ui->frame_2->move(50,50);
    ui->frame_2->resize(ui->frame_1->width()-100,ui->frame_1->height()-100);
    ui->frame_2->setStyleSheet("QFrame#frame_2{background-color:rgba(255,255,255,95)}");

    ui->textEdit->setAlignment(Qt::AlignCenter);

    //启动2个定时器
    id = startTimer(1000);//每隔1s自动执行timerEvent()函数
    id1 = startTimer(1000);//每隔1s自动执行timerEvent()函数
}

Widget::~Widget()
{
    //关闭定时器
    killTimer(id);
    killTimer(id1);
    delete ui;
}

void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId()==id){
        QTime sys_time = QTime::currentTime();//获取系统时间

        QString t = sys_time.toString("hh:mm:ss");//系统时间转换为字符串

        if(IsSetTime)
        {
            //字符串分割
            QStringList list = t.split(":");
            if(list[0]+":"+list[1] == setTimeStr)
            {
                killTimer(id);//关闭定时器
                for (int i=0;i<30;i++) {
                    speecher->say(ui->textEdit->toPlainText());
                }
//                id2 = startTimer(60000);//每隔60s也就是1分钟执行timeEvent()函数
            }
        }

    }else if(event->timerId()==id1){
        //获取系统时间
        QTime sys_time = QTime::currentTime();

        //系统时间转换为字符串
        QString t = sys_time.toString("hh:mm:ss");

        //将系统时间显示到界面上
        ui->nowatime_label->setText(t);

        ui->nowatime_label->setAlignment(Qt::AlignCenter);

    }
}


void Widget::on_pushButton_clicked()
{
    if(ui->pushButton->text()=="启动")
    {
        if(ui->timeEdit->text()!=""&&ui->textEdit->toPlainText()!="")
        {
            //设置不可用状态
            ui->textEdit->setEnabled(false);
            ui->timeEdit->setEnabled(false);
            setTimeStr = ui->timeEdit->text();
            qDebug() << setTimeStr;
            //QString字符串的截取
            QStringList list = setTimeStr.split(":");
            if(list.size()!=2||list[0].toInt()<1||list[0].toInt()>23||list[1].toInt()<1||list[1].toInt()>59)
            {
                QMessageBox::critical(this,
                                     "提示",
                                     "输入设定时间格式错误,请输入正确的格式(时:分)!",
                                     QMessageBox::Ok);
            }else
            {
                IsSetTime=true;
                ui->pushButton->setText("关闭");
            }

        }else
        {
            QMessageBox::critical(this,
                                 "提示",
                                 "未输入设定时间或者朗读内容,请输入设定时间和朗读内容!",
                                 QMessageBox::Ok);
        }
    }else
    {
        //设置可用状态
        ui->textEdit->setEnabled(true);
        ui->timeEdit->setEnabled(true);

        speecher->stop();//停止朗诵
        id = startTimer(1000);//每隔1s自动执行timerEvent()函数 打开定时器

        IsSetTime=false;
        ui->pushButton->setText("启动");
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个Qt编写的简单闹钟UI界面的代码示例。 ```cpp #include <QApplication> #include <QBoxLayout> #include <QComboBox> #include <QDateTime> #include <QHBoxLayout> #include <QLabel> #include <QPushButton> #include <QSpinBox> #include <QTime> #include <QWidget> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget *widget = new QWidget(); widget->resize(400, 200); QLabel *title = new QLabel("闹钟"); title->setFont(QFont("Arial", 20, QFont::Bold)); QHBoxLayout *topLayout = new QHBoxLayout(); topLayout->addWidget(title, 0, Qt::AlignHCenter); QLabel *hourLabel = new QLabel("小时:"); QSpinBox *hourSpinBox = new QSpinBox(); hourSpinBox->setRange(0, 23); hourSpinBox->setValue(QTime::currentTime().hour()); QHBoxLayout *hourLayout = new QHBoxLayout(); hourLayout->addWidget(hourLabel); hourLayout->addWidget(hourSpinBox); QLabel *minuteLabel = new QLabel("分钟:"); QSpinBox *minuteSpinBox = new QSpinBox(); minuteSpinBox->setRange(0, 59); minuteSpinBox->setValue(QTime::currentTime().minute()); QHBoxLayout *minuteLayout = new QHBoxLayout(); minuteLayout->addWidget(minuteLabel); minuteLayout->addWidget(minuteSpinBox); QLabel *soundLabel = new QLabel("响铃:"); QComboBox *soundComboBox = new QComboBox(); soundComboBox->addItem("无声"); soundComboBox->addItem("铃声1"); soundComboBox->addItem("铃声2"); soundComboBox->addItem("铃声3"); QHBoxLayout *soundLayout = new QHBoxLayout(); soundLayout->addWidget(soundLabel); soundLayout->addWidget(soundComboBox); QPushButton *confirmButton = new QPushButton("确定"); QPushButton *cancelButton = new QPushButton("取消"); QHBoxLayout *buttonLayout = new QHBoxLayout(); buttonLayout->addWidget(confirmButton); buttonLayout->addWidget(cancelButton); QVBoxLayout *mainLayout = new QVBoxLayout(); mainLayout->addLayout(topLayout); mainLayout->addLayout(hourLayout); mainLayout->addLayout(minuteLayout); mainLayout->addLayout(soundLayout); mainLayout->addLayout(buttonLayout); widget->setLayout(mainLayout); widget->show(); return a.exec(); } ``` 希望这个代码示例能为你提供帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值