Qt简易闹钟

2023-11-07

配置文件

QT       += core gui texttospeech

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

头文件

widght.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QDebug>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QTextEdit>
#include <QTextToSpeech>
#include <QTimer>
#include <QDateTime>
#include <QThread>
#include <QTimerEvent>
//#include <QMediaPlayer>

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) override;

private:
    Ui::Widget *ui;

    //定义一个lable指针, 当前时间
    QLabel *current_time_lab;

    //定义一个行编辑器指针, 闹钟
    QLineEdit *clock_edit;

    //定义一个按钮指针, 启动
    QPushButton *start_clock_btn;

    //定义一个停止闹钟, 关闭
    QPushButton *stop_clock_btn;

    //定义一个文本编辑器
    QTextEdit *text_edit;

    //定义一个闹钟语音播放者
    QTextToSpeech *clock_speecher;

    //定义一个定时器指针
    QTimer *clock_timer;
    QTimer *clock_timer2;

    int time_id;

public slots:
    void start_slot();
    void cklock_slot();
    void stop_slot();


};
#endif // WIDGET_H

源文件

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.cpp

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

int flag = 0;
int clock_flag = 0;
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //组件实例化
    current_time_lab = new QLabel(this);
    clock_edit = new QLineEdit(this);
    start_clock_btn = new QPushButton("启动", this);
    stop_clock_btn = new QPushButton("停止", this);
    text_edit = new QTextEdit(this);
    clock_speecher = new QTextToSpeech();
    clock_timer = new QTimer(this);
    clock_timer2 = new QTimer(this);

    //设置页面布局
    //固定窗口大小
    this->setFixedSize(500,400);
    //this->setStyleSheet("background-img");
    current_time_lab->resize(300, 70);
    current_time_lab->move(40,30);
    current_time_lab->setStyleSheet("background-color:rgba(137, 199, 117, 0.7);font:幼圆; font-size:26px;");
    current_time_lab->setAlignment(Qt::AlignCenter);


    clock_edit->resize(100, 30);
    //clock_edit->setPlaceholderText("定时时间");
    clock_edit->move(this->width()-140, 30);
    clock_edit->setAlignment(Qt::AlignHCenter);


    start_clock_btn->resize(45, 30);
    start_clock_btn->move(clock_edit->x(), clock_edit->y()+40);
    start_clock_btn->setStyleSheet("font:幼圆; font-size:10px; padding:2px");

    stop_clock_btn->resize(start_clock_btn->size());
    stop_clock_btn->move(start_clock_btn->x()+55, start_clock_btn->y());
    stop_clock_btn->setStyleSheet("font:幼圆; font-size:10px; padding:2px");

    text_edit->resize(this->width()-80, 220);
    text_edit->move(current_time_lab->x(), current_time_lab->y()+current_time_lab->height()+40);

    stop_clock_btn->setDisabled(true);

    clock_timer->start(1000);
    connect(clock_timer, &QTimer::timeout, this, [&](){
        QDateTime date_time = QDateTime::currentDateTime();
        current_time_lab->setText(date_time.toString("yyyy-MM-dd hh:mm:ss"));
        QTime currenttime = QTime::currentTime();
        QString time = currenttime.toString("hh:mm:ss");
        if(time <= clock_edit->text())
        {
            clock_flag = 0;
        }
    });
    connect(clock_timer, &QTimer::timeout, this, &Widget::cklock_slot);

    connect(start_clock_btn, &QPushButton::clicked, this, &Widget::start_slot);
    connect(stop_clock_btn, &QPushButton::clicked, this, &Widget::stop_slot);

    //time_id = startTimer(0);

}

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

void Widget::start_slot()
{
    start_clock_btn->setEnabled(false);
    stop_clock_btn->setEnabled(true);
    clock_edit->setDisabled(true);

}

void Widget::cklock_slot()
{
    if(!start_clock_btn->isEnabled())
    {

        QTime currenttime = QTime::currentTime();
        QString time = currenttime.toString("hh:mm:ss");

        if(time >= clock_edit->text()&& clock_flag == 0)
        {
            if(flag == 0)
            {
                clock_speecher->say(text_edit->toPlainText());
                clock_timer2->start(2000);
                connect(clock_timer2, &QTimer::timeout, [](){
                    flag = 0;});

            }
            flag =1;
        }
    }
    else
        clock_speecher->stop();

}

void Widget::stop_slot()
{
    //clock_speecher->stop();
    start_clock_btn->setEnabled(true);
    stop_clock_btn->setEnabled(false);
    clock_edit->setEnabled(true);
    clock_flag = 1;
}

//定时器事件处理函数的实现
void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == time_id)
    {
        //static int num = 0;
        //ui->eventtime->setNum(++num);  //setNum()函数是设置文本内容数字

       QDateTime sys_dt = QDateTime::currentDateTime(); //获取当前系统的日期时间
       this->current_time_lab->setText(sys_dt.toString("yyyy-MM-dd hh:mm:ss"));
       this->current_time_lab->setAlignment(Qt::AlignCenter);

       if(!start_clock_btn->isEnabled())
       {

           QTime currenttime = QTime::currentTime();
           QString time = currenttime.toString("hh:mm:ss");

           if(time == clock_edit->text())
           {
//               if(flag == 0)
//               {
                   clock_speecher->say(text_edit->toPlainText());
   //                clock_timer2->start(2000);
   //                connect(clock_timer2, &QTimer::timeout, [](){
   //                    flag = 0;});

               //}
               //flag =1;
           }
       }
       else
           clock_speecher->stop();
    }
}

Qt简易闹钟

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt简易闹钟 的相关文章

  • QGraphicsView 和 eventFilter

    这个问题已经困扰我两天多了 所以我想我应该问一下 我在Win7上使用Qt 4 5 3 用VC2008编译 我有 MyGraphicsView 继承 QGraphicsView 和 MyFilter 继承 QObject 类 当我将 MyFi
  • 如何在 Qt-Embedded 中(正确)输出多语言文本?

    我的目标系统是 linux 3 3 7 Qt Embedded 开源版 4 8 Droid 字体 取自 fonts droid 20111207 git 1 all deb Debian 软件包并复制到 usr lib fonts目录 主要
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • QDesktopServices::openUrl 在资源管理器中选择指定文件

    在大多数编码程序中 您可以右键单击该项目 然后单击 在资源管理器中显示 它会在资源管理器中显示选定项目的文件 在 Qt 中使用 QDesktopServices 如何做到这一点 或在 QT 中执行此操作的任何方式 您可以使用此方法在 Win
  • Qt中如何获取鼠标在屏幕上的位置?

    我想获取屏幕上的鼠标坐标 我怎样才能在 Qt 中做到这一点 在 Windows 上 使用 C 我正在做类似答案中建议的事情对于这个问题 https stackoverflow com q 11737665 1420197 正如文档所述 QC
  • Qt 创建者 + MITK (Linux)

    我正在尝试使用MITK 与 Qt Creator 我已经通过 ccmake 成功编译并使用了 VTK 和 ITK 我已经编译了 MITK超级建造模式 它下载 CTK VTK ITK 等 然后我就配置好了 我已经用 make 编译了 大约两个
  • 如何在带有预编译头的项目中使用google protobuf

    我有一个包含多个项目的解决方案 我的项目 但不是全部 使用预编译头 我决定使用 protobuf 但遇到了一个问题 在 protoc exe 从 proto 生成 pb h 后 我尝试包含标头并收到错误 预编译标头未包含在 pb h 中 我
  • 禁用 QML Slider 的鼠标滚轮

    我希望能够滚动Flickable使用鼠标滚轮 或触摸板上的两根手指 不改变Sliders它可能包含 示例代码及结果应用 import QtQuick 2 7 import QtQuick Window 2 2 import QtQuick
  • 如何使用 Qtimer 添加 1 秒延迟

    我目前有一个方法如下 void SomeMethod int a Delay for one sec timer gt start 1000 After one sec SomeOtherFunction a 这个方法实际上是一个附加到信号
  • 加权 Voronoi 的 CGAL 2D APOLLONIUS 图 - 如何生成和获取面和顶点?

    我正在尝试根据阿波罗尼乌斯图生成加权沃罗诺伊 我正在使用 CGAL 库 我找不到如何从 apollonius 获取面和顶点的好例子 我有以下类型定义 typedef double NT typedef CGAL Cartesian lt N
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • QToolButton:更改菜单位置

    使用菜单时QToolButton菜单显示在按钮的正下方 有没有办法在按钮的左侧 右侧显示菜单 我知道这个问题不久前已得到回答 但我想为此问题添加新答案 因为接受的答案不再有效 实际上 更改 QToolButton 上的菜单位置非常容易 您需
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • Qt:测量事件处理时间

    我想测量我的应用程序中的哪些事件在主线程中需要很长时间才能执行 阻塞 GUI 或者至少是否有任何事件花费的时间超过 比如说 10 毫秒 显然 我对需要很长时间的任务使用线程和并发 但有时很难在其他线程中放入的内容和可以保留在 GUI 中的内
  • QT从QTableWidgetItem继承到Widget并覆盖'<'运算符

    我想要一个QTableWidget具有定制的某些单元QProgressBars 并且我希望能够对包含这些的列进行排序 我的定制QProgressBar继承自两者QProgressBar and QTableWidgetItem 并且我正在覆
  • Qt 5.6 测试版 Visual Studio 2015

    我已经安装了这个 http download qt io development releases qt 5 6 5 6 0 beta qt opensource windows x86 msvc2015 5 6 0 beta exe mi
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 是否可以在 Qt Creator 中将 Qt 样式表与升级的小部件一起使用?

    我正在尝试使用 Qt 样式表对标准小部件进行一些重大的重新设计 因此 在为不同的小部件手动完成大部分工作之后 objectName选择器 我决定以某种方式对类似的小部件进行分组 例如我有多个QFrames其作用类似于内部表单中的标题 我希望

随机推荐

  • Eclipse 安装集成 FindBugs BUG分析插件

    一 下载eclipse软件 https www eclipse org downloads 下载Zip压缩包 解压缩即可 二 下载findbugs plugin压缩包 官网下载或者是从其他资源获取 http findbugs sourcef
  • 阿里推荐算法:BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transform

    这篇是阿里猜你喜欢的一篇transformer paper 含金量很高 注意 1 bert用在推荐系统中 将用户的历史序列看做是词序列 2 测试时 将序列的最后一个item进行masked Abstract 根据用户历史的行为信息 对用户动
  • [论文阅读] (16)Powershell恶意代码检测论文总结及抽象语法树(AST)提取

    娜璋带你读论文 系列主要是督促自己阅读优秀论文及听取学术讲座 并分享给大家 希望您喜欢 由于作者的英文水平和学术能力不高 需要不断提升 所以还请大家批评指正 非常欢迎大家给我留言评论 学术路上期待与您前行 加油 前一篇介绍分享英文论文审稿意
  • python1_4字符串

    字符串 string My name string My name string My name 字符串可以是单 双 三引号 三引号可以空行 res string 1 字符串的索引 res string 2 print res 如图所示1
  • rstudio 导出结果_R语言结果输出方法

    输出函数 cat sink writeLines write table 根据输出的方向分为输出到屏幕和输出到文件 1 cat函数即能输出到屏幕 也能输出到文件 使用方式 cat file sep fill FALSE labels NUL
  • SpringBoot--基础--09--条件注解

    SpringBoot 基础 09 条件注解 一 条件注解 1 1 代码和测试 SysService public interface SysService void show WindowService public class Windo
  • apache beam入门之group分组操作

    目录 apache beam 个人使用经验总结目录和入门指导 Java 如果我们希望将相同的元素进行分组 则可以用Group的转化方法进行操作 首先我们生成1个单词数据集 List
  • 最新uniApp微信小程序获取头像open-type=“chooseAvatar“ @chooseavatar方法

    小程序用户头像昵称获取规则调整公告 调整说明 自 2022 年 10 月 25 日 24 时后 以下统称 生效期 用户头像昵称获取规则将进行如下调整 自生效期起 小程序 wx getUserProfile 接口将被收回 生效期后发布的小程序
  • matlab-滤波系数生成频响曲线

    转载自 matlab 滤波系数生成频响曲线 设计滤波器 build filter sample rate fs 6250 cutoff frequency fc 1000 build a 6th order highpass Butterw
  • 判断多边形与多边形是否相交的方法,代码来自于OpenLayers。

    在做GIS开发时 常常需要用到空间判断的算法 比如 判断地图中的多边形与多边形是否相交 我在项目中具体的需求就是如此 需要过滤某个区域的瓦片地图 先把瓦片地图反向解析成Envolope 然后和该区域进行比对 再做其他处理 其实在已经有开源的
  • 自己动手实现一个《倒水解密》游戏

    本文所有源代码和VisualStudio2010 NET Fx 2 0 工程打包在本文最后下载 别找我要源码 一概不理会 倒水解密 是一款很不错的手机益智类游戏 游戏界面如下 规则是这样的 有N个容量不同的瓶子 指定 将a升水倒入容量为b的
  • 从学术到实践,“学院派”崔宇的区块链破壁之道

    如何将爱好变成事业 崔宇做到了 作为北方工业大学信息学院的学生 崔宇是一个狂热的技术爱好者 为了时刻紧跟技术的发展 他关注量子密码 元宇宙等前沿领域的研究 当被问及业余爱好的时候 崔宇的回答是 没有 唯一的 爱好 是 写编译器 在开源社区
  • Python——hashlib

    hashlib模块 hashlib是一个提供字符加密功能的模块 包含MD5和SHA的加密算法 具体支持md5 sha1 sha224 sha256 sha384 sha512等算法 该模块在用户登录认证方面应用广泛 对文本加密也很常见 模块
  • jni编写时的教训(函数签名不对应)

    最近由于项目结构上的调整 原先我的模块位于APP层 通过aidl hidl调用到native层的c 的服务的接口 用于更新EMMC上的文件内容 需要改为 C 服务更新EMMC上文件内容的代码封装成jni的so库 由我的模块去调用 由于jni
  • Python---字典添加元素

    1 8 5 cvar 字典 特点 1 符号 2 关键字 dict 3 保存元素是 key value 一对 定义 dict1 空字典 dict2 dict 空字典 dict3 ID 123156489795 name lucky age 1
  • VUE---7.事件&循环

    目录 一 事件 二 按键 1 按键修饰符 内置 2 自定义修饰符 event key 3 系统修饰符 4 组合修饰符 三 循环 一 事件 1 绑定事件 2 event事件对象 3 修饰符 stop 阻止冒泡 prevent 阻止默认事件 c
  • 华为服务器近端连接显示绿屏,故障诊断说明 - 华为服务器 iMana 200 用户指南 26 - 华为...

    MCE Error Diagnose DIMMxxx memory fault is doubted of this error Error Handling Suggestion Please shut down system and c
  • Rancher2.x入门教程

    1 x教程请参考上篇 容器管理Rancher1 x及监控工具入门 1 简介 为了更好的管理Kubernetes Rancher的大部分功能经过重新设计 并且Rancher2 0延续了大多数1 0版本的友好功能 如简洁的UI和应用商店等 2
  • nohup和screen的比较

    在实际工作中 我们ssh等到远程的Linux上 运行一个程序 但是当我们关闭掉我们的连接终端断开ssh后 刚才运行着的程序也会自动被中断结束 当ssh连接断开后 如何让我们的程序继续在后台运行呢 下面介绍我常使用的两个方法 A 使用nohu
  • Qt简易闹钟

    配置文件 QT core gui texttospeech greaterThan QT MAJOR VERSION 4 QT widgets CONFIG c 11 The following define makes your comp