qt day 5

news2025/1/20 10:54:52

1>实现闹钟功能

----------------------------------------------------------------------
.pro
----------------------------------------------------------------------
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

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

#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QPushButton>
#include <QTimer>
#include <QTime>
#include <QTextToSpeech>
#include <QMouseEvent>

class Widget : public QWidget
{
    Q_OBJECT

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

    void Localtime();
    void Clock_check();
    void Opbtn_Cli();
    void Clobtn_Cli();
    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;

private:
    //显示实施时间定时器
    QTimer *loct;
    QTimer *clotime;

    //界面组件
    QLabel *loctimlab;
    QLineEdit *clocklab;
    QPushButton *opbtn;
    QPushButton *clobtn;
    QTextEdit *txt;

    //时间比较
    int lhour = 0;
    int lmin = 0;
    int lsec = 0;
    int chour = 0;
    int cmin = 0;
    int csec = 0;

    //鼠标位置
    QPoint clipos;
    QPoint movpos;

    //播报员
    QTextToSpeech *sp = new QTextToSpeech(this);

};
#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"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->setWindowFlag(Qt::FramelessWindowHint);
    this->resize(700,500);
    this->setStyleSheet("background-color:skyblue");
    this->setWindowOpacity(0.8);
    //创建显示当前时间文本框
    loctimlab = new QLabel(this);
    loctimlab->move(50,50);
    loctimlab->resize(350,100);
    loctimlab->setAlignment(Qt::AlignCenter);
    QFont ff;
    ff.setPointSize(20);
    loctimlab->setFont(QFont(ff));

    //创建定时时间文本框
    clocklab = new QLineEdit(this);
    clocklab->move(loctimlab->x()+loctimlab->width()+50,loctimlab->y());
    clocklab->resize(200,45);
    ff.setPointSize(16);
    clocklab->setAlignment(Qt::AlignHCenter);
    clocklab->setFont(QFont(ff));
    clocklab->setText("00 : 00 : 00");


    //创建开启按钮
    opbtn = new QPushButton(this);
    opbtn->move(clocklab->x(),clocklab->y()+clocklab->height()+10);
    opbtn->resize(75,45);
    opbtn->setText("开启");
    connect(opbtn,&QPushButton::clicked,this,&Widget::Opbtn_Cli);

    //创建停止按钮
    clobtn = new QPushButton(this);
    clobtn->move(clocklab->x()+opbtn->width()+50,clocklab->y()+clocklab->height()+10);
    clobtn->resize(75,45);
    clobtn->setText("停止");
    clobtn->setEnabled(0);
    connect(clobtn,&QPushButton::clicked,this,&Widget::Clobtn_Cli);

    //创建提示文本框
    txt = new QTextEdit(this);
    txt->move(loctimlab->x(),loctimlab->y()+loctimlab->height()+50);
    txt->resize(600,250);
    txt->setText("knocking!!!");

    //实例化定时器
    loct = new QTimer(this);
    loct->start(1000);
    clotime = new QTimer(this);

    //连接定时器与槽函数
    connect(loct,&QTimer::timeout,this,&Widget::Localtime);

    connect(clotime,&QTimer::timeout,this,&Widget::Clock_check);
}

Widget::~Widget()
{
}

//获取实时时间
void Widget::Localtime()
{
    //获取实时时间
    QTime ltime = QTime::currentTime();

    //把时间显示到文本框上
    Widget::loctimlab->setText(ltime.toString("hh : mm : ss"));

    //获取时间
    lhour = ltime.hour();
    lmin = ltime.minute();
    lsec = ltime.second();

}

//时间比较
void Widget::Clock_check()
{
    if(lhour == chour && lmin == cmin && lsec == csec)
    {
        //阅读文本内容
        sp->say(txt->toPlainText());
    }
}

//开启闹钟定时
void Widget::Opbtn_Cli()
{
    //启动定时器
    clotime->start(1000);
    //获取定时时间
    QString tt;
    QByteArray t;
    QByteArray tmp;
    tt = clocklab->text();
    t = tt.toUtf8();
    int j = 0;
    //获取小时数
    for(int i = 0;t[j] != ':';i++,j++)
    {
        tmp[i] = t[j];
    }
    j++;
    chour = atoi(tmp);
    //获取分钟数
    for(int i = 0;t[j] != ':';i++,j++)
    {
        tmp[i] = t[j];
    }
    j++;
    cmin = atoi(tmp);
    //获取秒数
    for(int i = 0;t[j] != ':';i++,j++)
    {
        tmp[i] = t[j];
    }
    j++;
    csec = atoi(tmp);

    //设置其他为不可用
    opbtn->setEnabled(0);
    clocklab->setEnabled(0);
    txt->setEnabled(0);
    clobtn->setEnabled(1);

}

//停止按钮
void Widget::Clobtn_Cli()
{
    //设置按钮可用
    opbtn->setEnabled(1);
    clocklab->setEnabled(1);
    txt->setEnabled(1);
    clobtn->setEnabled(0);

    //停止定时器
    clotime->stop();
}

void Widget::mousePressEvent(QMouseEvent *event)
{
    if(event->buttons() == Qt::LeftButton)
    {
        clipos = event->pos();
    }
    else
    {
        this->close();
    }
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    this->move(event->globalPos()-clipos);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/966862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tomcat 安装

1.关闭防火墙 2.安装JDK包 3. 4。添加环境变量 5.刷新配置文件 6.解压文件 7.启动tomcat 8. 9.编写tomcat.service文件 vim /etc/systemd/system/tomcat.service 10.刷新服务 11.打开浏览器访问&#xff1a;192.168.2.100:8080/&#xff0c;正常可以看到以下界面

虚拟世界指南:从零开始,一步步教你安装、配置和使用VMware,镜像ISO文件!

本章目录 CentOS简介镜像下载一、新建虚拟机&#xff08;自定义&#xff09;1、进入主页&#xff0c;在主页中点击“创建新的虚拟机”2、点击创建虚拟机创建自己的虚拟机。可以选择自定义3、在“硬件兼容性(H)中选择&#xff1a;Workststion 15.x” ->下一步4、选择“稍后安…

ARTS打卡第三周之有序链表的合并、gdb中run命令、数制建议、WOOP思维心理学分享

Algorithm 题目&#xff1a;两个有序链表的合并 自己的分析见博客《合并两个有序链表》 Review 《run command》是我这周读的英文文章。 在gdb中&#xff0c;run命令在不设置断点的前提下&#xff0c;能够直接把程序运行完成&#xff1b;要是设置断点的话&#xff0c;可以直…

知识图谱项目实践

目录 步骤 SpaCy Textacy——Text Analysis for Cybersecurity Networkx Dateparser 导入库 写出页面的名称 ​编辑 自然语言处理 词性标注 可能标记的完整列表 依存句法分析&#xff08;Dependency Parsing&#xff0c;DEP&#xff09; 可能的标签完整列表 实例理…

SEAN代码(1)

代码地址 首先定义一个trainer。 trainer Pix2PixTrainer(opt)在Pix2PixTrainer内部&#xff0c;首先定义Pix2PixModel模型。 self.pix2pix_model Pix2PixModel(opt)在Pix2PixModel内部定义生成器&#xff0c;判别器。 self.netG, self.netD, self.netE self.initialize_…

11.Redis的慢操作之rehash

Redis为什么快 它接收到一个键值对操作后&#xff0c;能以微秒级别的速度找到数据&#xff0c;并快速完成操作。 数据库这么多&#xff0c;为啥 Redis 能有这么突出的表现呢&#xff1f; 内存数据结构 一方面&#xff0c;这是因为它是内存数据库&#xff0c;所有操作都在内存上…

Redis—常用数据结构

Redis—常用数据结构 &#x1f50e;数据结构与内部编码 Redis 中常用的数据结构包括 Strings—字符串Hashes—哈希表Lists—列表Sets—集合Sorted sets—有序集合 Redis 底层在实现上述数据结构时, 会在源码层面针对上述实现进行特定优化, 以达到节省时间 / 节省空间的效果 …

卡片介绍、EMV卡组织、金融认证---安全行业基础篇2

一、卡片介绍 卡片是一种用于存储和传输数据的可携带式物品&#xff0c;通常由塑料或纸质材料制成。卡片通常具有特定的尺寸和形状&#xff0c;以适应各类读写设备。不同类型的卡片可以用于不同的应用&#xff0c;如身份验证、支付、门禁控制等。 接触卡 接触卡是一种需要与读…

量化策略:CTA,市场中性,指数增强

CTA 策略 commodity Trading Advisor Strategy&#xff0c;即“商品交易顾问策略”&#xff0c;也被称作管理期货策略。 期货T0&#xff0c;股票T1双向交易&#xff1a;就单向交易而言的&#xff0c;不仅能先买入再卖出&#xff08;做多&#xff09;&#xff0c;而且可以先卖…

Java异常(Error与Exception)与常见异常处理——第八讲

前言 前面我们讲解了Java的基础语法以及面向对象的思想,相信大家已经基本掌握了Java的基本编程。在之前代码中,我们也看到代码写错了编译器会提示报错,或者编译器没有提示,但是运行的时候报错了,比如前面的数组查询下标超过数组的长度。所以在使用计算机语言进行项目开发的…

CLIP:连接文本-图像

Contrastive Language-Image Pre-Training CLIP的主要目标是通过对比学习&#xff0c;学习匹配图像和文本。CLIP最主要的作用&#xff1a;可以将文本和图像表征映射到同一个表示空间 这是通过训练模型来预测哪个图像属于给定的文本&#xff0c;反之亦然。在训练过程中&#…

高频策略:抢盘口,做市,短期趋势

利润来源 价格短期趋势随机游走震荡 策略分类 抢盘口&#xff1a;盘口大单封堵&#xff0c;快速在盘口中双向下单&#xff0c;赚取价差做市&#xff1a;盘口买卖活跃&#xff0c;预测市价单击穿距离&#xff0c;在盘口外双向下单&#xff0c;赚取价差 挂单范围要小于市价击穿距…

十二、分组查询

1、分组查询 &#xff08;1&#xff09;基础语法&#xff1a; select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组之后的过滤条件] &#xff08;2&#xff09;注意事项&#xff1a; &#xff08;3&#xff09;理解&#xff1a; select后的“字段列表…

personalized image enhancement 调研

Personalized Image Enhancement Using Neural Spline Color Transforms 这是TIP期刊 2020年的一篇论文&#xff0c;首先提出了一个能预测曲线的网络&#xff0c;预测一些锚点&#xff0c;根据锚点插值出连续的曲线&#xff0c;然后用曲线对raw image进行retouching。然后提出了…

ODC现已开源:与开发者共创企业级的数据库协同开发工具

OceanBase 开发者中心&#xff08;OceanBase Developer Center&#xff0c;以下简称 ODC&#xff09;是一款开源的数据库开发和数据库管理协同工具&#xff0c;从首个版本上线距今已经发展了三年有余&#xff0c;ODC 逐步由一款专为 OceanBase 打造的开发者工具演进成为支持多数…

第 361 场 LeetCode 周赛题解

A 统计对称整数的数目 枚举 x x x class Solution { public:int countSymmetricIntegers(int low, int high) {int res 0;for (int i low; i < high; i) {string s to_string(i);if (s.size() & 1)continue;int s1 0, s2 0;for (int k 0; k < s.size(); k)if …

快速为RPG辅助工具MTool增加更多快捷键(一键保存等)

起源&#xff1a;MTool是个好工具&#xff0c;本身固然好用&#xff0c;但是它本身的快捷键功能很少&#xff0c;虽然内置了一个录制工具&#xff0c;但是一个个的录&#xff0c;又麻烦&#xff0c;一般人也难以掌握 本文用快速方法增加更多快捷键&#xff0c;可以做到一键保存…

利用非线性解码模型从人类听觉皮层的活动中重构音乐

音乐是人类体验的核心&#xff0c;但音乐感知背后的精确神经动力学仍然未知。本研究分析了29名患者的独特颅内脑电图(iEEG)数据集&#xff0c;这些患者听了Pink Floyd的歌曲&#xff0c;并应用了先前在语音领域使用的刺激重建方法。本研究成功地从直接神经录音中重建了可识别的…

【性能优化】聊聊性能优化那些事

针对于互联网应用来说&#xff0c;性能优化其实就是一直需要做的事情&#xff0c;因为系统响应慢&#xff0c;是非常影响用户的体验&#xff0c;可能回造成用户流失。所以对于性能非常重要。最近正好接到一个性能优化的需求&#xff0c;需要对所负责的系统进行性能提升。目前接…

Python自动化小技巧22——获取中国高校排名数据

背景 【软科排名】2023年最新软科中国大学排名|中国最好大学排名 (shanghairanking.cn) 爬取这个网站所有的高校的数据&#xff0c;包括学习名称&#xff0c;层次&#xff0c;地区&#xff0c;分数等等信息&#xff1a;[办学层次,学科水平,办学资源,师资规模与结构,人才培养,…