QT(9.3)定时器,绘制事件

作业:

自定义一个闹钟

pro文件:

QT       += core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += 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.0SOURCES += \main.cpp \widget.cppHEADERS += \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

头文件:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPushButton>//按钮类
#include <QLineEdit>//行编辑器
#include <QTextEdit>//文本编辑器
#include <QLabel>//标签
#include <QPainter>//画家类
#include <QPaintEvent>//绘制事件
#include <QTime> //时间类
#include <QTimer>//定时器类
#include <QTimerEvent>//定时器事件类
#include <QDateTime>//日期时间类
#include <QTextToSpeech>//文本转语音
#include<QMouseEvent>//鼠标移动事件class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();QLabel *lab1; //实例化一个标签对象QLineEdit *edit1;//是实例化一个行编辑器对象QPushButton *btn_start,*btn_stop;//实例化开始按钮和停止按钮QTextEdit *txtedit;//实例化一个文本编辑器对象
public:void btn_start_slot();//自定义开始按钮的槽函数void btn_stop_slot();//自定义停止按钮的槽函数void paintEvent(QPaintEvent *event) override;//重写绘画事件处理函数void timeout_slot();//自定义处理timeout信号的函数void mousePressEvent(QMouseEvent *event) override;//鼠标按下事件void mouseMoveEvent(QMouseEvent *event) override;//鼠标移动事件QString tm;//定义时间字符串
private:QTimer *timer;//定义定时器QTextToSpeech *speecher;//定义语音播报QPoint drap;  //定义z向量};
#endif // WIDGET_H

自定义函数:
 

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent)
{//设置纯净窗口this->setWindowFlag(Qt::FramelessWindowHint);//设置窗口大小为一个固定大小this -> setFixedSize(700,375);//设置窗口透明度this -> setWindowOpacity(1);//设置边框粗细this->setStyleSheet("background-color:skyblue;border:10px solid rgb(0,0,0);border-radius:10px");// 创建一个标签,显示时间lab1 = new QLabel(this);//设置标签大小lab1->resize(425,100);//设置位置lab1->move(25,25);//创建一个行编辑器edit1 = new QLineEdit(this);//设置行编辑器大小edit1->resize(200,55);//设置行编辑器中字体大小edit1->setFont(QFont("微软雅黑",15));//设置行编辑器位置edit1->move(lab1->x()+450,lab1->y());//设置占位文本edit1->setPlaceholderText("输入时间00:00:00");//创建一个开始按钮btn_start = new QPushButton("启动",this);//设置按钮大小btn_start->resize(90,40);//设置按钮位置btn_start->move(edit1->x(),edit1->y()+60);//创建一个停止按钮btn_stop = new QPushButton("停止",this);//设置停止按钮为不可用状态btn_stop->setEnabled(false);//设置按钮大小btn_stop->resize(90,40);//设置按钮位置btn_stop->move(btn_start->x()+110,btn_start->y());// 创建一个文本编辑器txtedit = new QTextEdit(this);//设置文本编辑器大小txtedit->resize(650,200);//设置文本编辑器的位置txtedit->move(lab1->x(),lab1->y()+125);//设置文本编辑器内容居中txtedit->setAlignment(Qt::AlignCenter);//设置文本编辑器文字txtedit->setFont(QFont("微软雅黑",20));//设置文本编辑器占位符txtedit->setPlaceholderText("提示:鼠标左键按住拖动移动,鼠标右键按下窗口关闭。不输入播报默认起床");//实例化一个定时器timer = new QTimer(this);//将该定时器的timeout信号连接到自定义槽函数connect(timer,&QTimer::timeout,this,&Widget::timeout_slot);//启动定时器timer->start(1000);//定时器一秒发送一个信号//连接开始按钮和对应槽函数connect(this->btn_start,&QPushButton::clicked,this,&Widget::btn_start_slot);//连接停止按钮和对应的槽函数connect(this->btn_stop,&QPushButton::clicked,this,&Widget::btn_stop_slot);//实例化播报员speecher = new QTextToSpeech(this);}
//绘制事件
void Widget::paintEvent(QPaintEvent *event)
{//绘制窗口边框QPen pen;pen.setWidth(15);//设置画笔颜色QPainter maliang(this);pen.setColor("purple");//设置画笔颜色pen.setStyle(Qt::DashLine);//设置画笔的线的形状maliang.setPen(pen);maliang.drawRect(0,0,this->width(),this->height());//绘制边框
}
//处理信号对应的槽函数
void Widget::timeout_slot()
{//调用QTime的静态成员函数获取当前系统时间QDateTime sys_time = QDateTime::currentDateTime();//将事件展示到label1中this->lab1->setText(sys_time.toString("yyyy-MM-dd hh:mm:ss"));this->lab1->setAlignment(Qt::AlignCenter);this->lab1->setFont(QFont("微软雅黑",25));if(sys_time.toString("hh:mm:ss")==tm){if(txtedit->toPlainText()==NULL){speecher->say("起床起床起床起床起床起床起床起床");}speecher->say(txtedit->toPlainText());}}
//开始按钮信号对应槽函数
void Widget::btn_start_slot()
{this->btn_start->setEnabled(false);//设置开始按钮不可用this->edit1->setEnabled(false);//设置输入时间编辑器不可用this->txtedit->setEnabled(false);//设置输入提示文本编辑器不可用this->btn_stop->setEnabled(true);//设置停止按钮可用tm = this->edit1->text();}//停止按钮信号对应的槽函数
void Widget::btn_stop_slot()
{this->btn_start->setEnabled(true);//设置开始按钮可用this->btn_stop->setEnabled(false);//设置结束按钮不可用this->edit1->setEnabled(true);//设置输入时间编辑器可用this->txtedit->setEnabled(true);//设置输入提示文本编辑器可用speecher->stop();
}
void Widget::mousePressEvent(QMouseEvent *event)//鼠标按下事件
{if(event->button()==Qt::RightButton){this->close();}drap = event->globalPos() - this->pos(); //相对于整个屏幕,组件左上角到组件中鼠标的向量
}
void Widget::mouseMoveEvent(QMouseEvent *event) //鼠标移动事件
{this->move(event->globalPos()-drap);  //将组件移动到新位置,由鼠标所在向量减去组件左上角到鼠标向量
}
Widget::~Widget()
{
}

主函数:

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

运行结果:

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

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

相关文章

PYTHON知识点学习-列表和元组

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由 Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

科目1基础知识快速入门精简

科目1-4 科目一&#xff0c;又称科目一理论考试、驾驶员理论考试。》学习道路交通安全法律、法规和相关知识学习 考试内容包括驾车理论基础、道路安全法律法规、地方性法规等相关知识&#xff0c;再加地方性法规。考试形式为上机考试&#xff0c;100道题&#xff0c;90分及以…

Python安装

windows安装Python python官网 python官网下载 打开下载链接选择需要下载的python版本。 点击版本号或者Download按钮进入下载页面&#xff0c;滚动到页面最下面可看到各个平台的 Python 安装包。 选择Operating System项为Windows的文件&#xff0c;这里我们选择windows64位…

用户中心笔记-leovany

1. 安装 官方地址&#xff1a;https://pro.ant.design/zh-CN/docs/getting-started 1.1 Mac系统 1.1.1 安装yarn 安装yarn brew install yarn查看版本 brew -v 1.1.2 安装node // 安装node brew install node // 关联 brew unlink node && brew link node // 查看版…

【开发语言】C语言与Python的互操作详解

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

在 Python 中构建卷积神经网络; 从 0 到 9 的手绘数字的灰度图像预测数字

一、说明 为了预测从0到9的数字&#xff0c;我选择了一个基于著名的Kaggle的MNIST数据集的数据集。数据集包含从 <0> 到 <9> 的手绘图数字的灰度图像。在本文中&#xff0c;我将根据像素数据&#xff08;即数值数据&#xff09;和卷积神经网络预测数字。 二、 卷积…

不可变集合、Lambda表达式、Stream流

不可变集合、Lambda表达式、Stream流 创建不可变集合 不能被修改的集合 应用场景 如果某个数据不能被修改&#xff0c;把它防御性的拷贝到不可变集合中是个很好的实践。 当集合对象被不可信的库调用时&#xff0c;不可变形式是安全的。 创建不可变集合 在List、Set、Map接口中…

leetcode 189. 轮转数组

2023.9.3 k的取值范围为0~100000&#xff0c;此时需要考虑到两种情况&#xff0c;当k为0时&#xff0c;此时数组不需要轮转&#xff0c;因此直接return返回&#xff1b;当k大于等于数组nums的大小时&#xff0c;数组将会转为原来的数组&#xff0c;然后再接着轮转&#xff0c;此…

2.神经网络的实现

创建神经网络类 import numpy # scipy.special包含S函数expit(x) import scipy.special # 打包模块 import pickle# 激活函数 def activation_func(x):return scipy.special.expit(x)# 用于创建、 训练和查询3层神经网络 class neuralNetwork:# 初始化神经网络def __init__(se…

租服务器训练深度学习模型

一、选择租哪个 推荐用AutoDL(便宜、功能强大、gug少、有时时客服解决问题) AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL 二、注册、登录 学生可以认证&#xff0c;享受会员价 服务器需要登录后先充值&#xff0c;先充个10元&#xff0c;接下来试试看。每次都是开机…

Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明

Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 目录 Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 一、简单介绍 二、安装文件相关说明 三、界面的简单说明 四、prompt 的一些语法简单说明 1、Prompt &#xff1a;正向提示词 &am…

docker常见面试问题详解

在面试的时候&#xff0c;面试官常常会问一些问题&#xff1a; docker是什么&#xff0c;能做什么&#xff1f;docker和虚拟机的区别是什么呢&#xff1f;docker是用什么做隔离的&#xff1f;docke的网络类型&#xff1f;docker数据之间是如何通信的&#xff1f;docker的数据保…

论文解读 | OmniObject3D:用于逼真感知、重建和生成的大词汇量3D对象数据集

原创 | 文 BFT机器人 这篇论文的主要目标是介绍和探索OmniObject3D数据集&#xff0c;该数据集包含大量真实扫描的3D物体&#xff0c;涵盖了190个类别&#xff0c;提供了多种丰富的注释&#xff0c;包括纹理3D网格、采样点云、多视图图像等。作者将OmniObject3D应用于多个3D视…

Axure RP暗黑色高保真中后台原型组件模板库及组件库素材

Axure RP暗黑色高保真中后台原型组件模板库及组件库素材&#xff0c;黑色一直以来就可以给人以高级、神秘的语义象征&#xff0c;相比于浅色模式&#xff0c;暗色模式藏着更多可能性。色彩具有层级关系&#xff0c;深色会在视觉感官上自动后退&#xff0c;浅色部分则会向前延展…

springboot:时间格式化的5种方法(解决后端传给前端的时间格式转换问题)推荐使用第4和第5种!

本文转载自&#xff1a;springboot&#xff1a;时间格式化的5种方法&#xff08;解决后端传给前端的时间显示不一致&#xff09;_为什么前端格式化日期了后端还要格式化_洛泞的博客-CSDN博客 时间问题演示 为了方便演示&#xff0c;我写了一个简单 Spring Boot 项目&#xff…

SQL sever中表管理

目录 一、创建表&#xff1a; 1.1语法格式&#xff1a; 1.2示例&#xff1a; 二、修改表&#xff1a; 2.1语法格式&#xff1a; 2.2示例&#xff1a; 三、删除表&#xff1a; 3.1语法格式&#xff1a; 3.2示例&#xff1a; 四、查询表&#xff1a; 4.1语法格式&…

PostgreSQL分区表

什么是分区表 数据库分区表将表数据分成更小的物理分片&#xff0c;以此提高性能、可用性、易管理性。分区表是关系型数据库中比较常见的对大表的优化方式&#xff0c;数据库管理系统一般都提供了分区管理&#xff0c;而业务可以直接访问分区表而不需要调整业务架构&#xff0c…

轻量、便捷、高效—经纬恒润AETP助力车载以太网测试

随着自动驾驶技术和智能座舱的不断发展&#xff0c;高宽带、高速率的数据通信对主干网提出了稳定、高效的传输要求&#xff0c;CAN(FD)、LIN已无法充分满足汽车的通信需求。车载以太网作为一种快速且扩展性好的网络技术&#xff0c;已经逐步成为了汽车主干网的首选。 此外&…

【Linux】JumpServer 堡垒机远程访问

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。JumpS…

ISO/IEC/ITU标准如何快速查找(三十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…