当前位置: 首页 > news >正文

QT:绘制事件和定时器

1.绘制时针

xx.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTimer>
#include<QPainter>
#include <QTime>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void paintEvent(QPaintEvent *event) override;
private:Ui::Widget *ui;QTimer *timer;private slots:void updateClock();};
#endif // WIDGET_H

xxx.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &Widget::updateClock);timer->start(1000); // 每秒更新一次
}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{QTime time = QTime::currentTime();//获取当前时间int hour = time.hour();int minute = time.minute();int second = time.second();QPainter painter(this); // 实例化对象painter.setRenderHint(QPainter::Antialiasing); //设置渲染,消除锯齿装// 设置时钟中心int side = qMin(width(), height());painter.translate(width() / 2, height() / 2);//将坐标移到中心painter.scale(side / 200, side / 200); //根据窗口,设置绘制的比例// 绘制时针painter.save();painter.rotate(30.0 * ((hour + minute / 60.0)));//绘制时针的旋转painter.setPen(Qt::NoPen);painter.setBrush(Qt::black);painter.drawRect(-5, -50, 10, 50);painter.restore();// 绘制分针painter.save();painter.rotate(6.0 * (minute + second / 60.0));painter.setPen(Qt::NoPen);painter.setBrush(Qt::darkGray);painter.drawRect(-3, -70, 6, 70);painter.restore();// 绘制秒针painter.save();painter.rotate(6.0 * second);painter.setPen(Qt::NoPen);painter.setBrush(Qt::red);painter.drawRect(-2, -90, 4, 90);painter.restore();// 绘制时钟刻度painter.setPen(Qt::black);for (int i = 0; i < 12; ++i) {painter.drawLine(88, 0, 96, 0);painter.rotate(30.0);}// 绘制小刻度painter.setPen(Qt::gray);for (int i = 0; i < 60; ++i) {if (i % 5 != 0) { // 跳过大刻度的位置painter.drawLine(92, 0, 96, 0);}painter.rotate(6.0);}
}void Widget::updateClock()
{update();
}

2. 闹钟播报

xxx.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QMessageBox>
#include<QTime>
#include<QTimer>
#include <QTextToSpeech>
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void timeout_slot1();void timeout_slot2();void on_startButton_clicked();void on_closeButton_clicked();private:Ui::Widget *ui;QTimer *timer1;QTimer *timer2;QTextToSpeech *speecher;
};
#endif // WIDGET_H

xxx.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);speecher = new QTextToSpeech(this);timer1 = new QTimer(this);timer2 = new QTimer(this);timer1->start(1000);connect(timer1, &QTimer::timeout, this, &Widget::timeout_slot1);connect(timer2, &QTimer::timeout, this, &Widget::timeout_slot2);}Widget::~Widget()
{delete ui;
}void Widget::timeout_slot1()
{QTime  sysTime  = QTime::currentTime();QString t = sysTime.toString("hh:mm:ss");ui->curtimelab->setText(t);
}
void Widget::timeout_slot2()
{if(ui->curtimelab->text()==ui->settimeEdit->text()){qDebug()<<"时间到";QString msg ="现在是北京时间"+ui->settimeEdit->text()+ui->textEdit->toPlainText();speecher->say(msg);timer2->stop();ui->startButton->setDisabled(false);ui->textEdit->setDisabled(false);}
}void Widget::on_startButton_clicked()
{timer2->start(1000);ui->startButton->setDisabled(true);ui->textEdit->setDisabled(true);}void Widget::on_closeButton_clicked()
{timer2->stop();ui->startButton->setDisabled(false);ui->textEdit->setDisabled(false);}

 

http://www.lryc.cn/news/460224.html

相关文章:

  • 【算法——递归回溯】
  • 手机在网状态接口的使用和注意事项
  • WebGl 使用uniform变量动态修改点的颜色
  • Leetcode 划分字母区间
  • 可编辑div遇到的那些事
  • 什麼是高速HTTP代理?
  • 三子棋(C 语言)
  • HWS赛题 入门 MIPS Pwn-Mplogin(MIPS_shellcode)
  • 纯血鸿蒙启动公测,爱加密鸿蒙加固平台发布,助力鸿蒙应用安全运营!
  • MySQL中 truncate、drop和delete的区别
  • 什么开放式耳机值得买?开放式耳机推荐排行榜!
  • Apache Doris的分区与分桶详解
  • docker详解介绍+基础操作 (二)info详解
  • C0023.在Clion中创建控件,对控件进行提升为自定义控件的步骤
  • 探索 C# 常用第三方库与框架
  • NodeJS GRPC简单的例子
  • 无人机之三维航迹规划篇
  • 风格迁移-StyTr 2 : Image Style Transfer with Transformers
  • 上百种【基于YOLOv8/v10/v11的目标检测系统】目录(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)
  • 记录搜罗到的Matlab 对散点进行椭圆拟合
  • 分享我最近使用《柬埔寨语翻译通》App的体验,不会说高棉语也能去柬埔寨旅游,畅通无阻!
  • 文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容
  • redis在项目中运用(基础)
  • libaom 源码分析系列:svc_encoder_rtc.cc 文件
  • MySQL备份和还原,用mysqldump、mysql和source命令来完成
  • MySQL Server、HeidiSQL(MySQL 数据库工具)
  • 矩阵相关算法
  • 微信小程序-封装通用模块
  • Modnet 人像抠图(论文复现)
  • 利用session机制造测试账号,无需前端也可以测试后端接口