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

qt 10.10作业

1、绘制钟表

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>         //画家类
#include <QTimer>
#include <QTime>
#include <QApplication>
#include <cmath>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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


    //重写绘制时间处理函数
    void paintEvent(QPaintEvent *event) override;
    void updateClock();

private:
    Ui::Widget *ui;

    QTimer *timer;
};
#endif // WIDGET_H

源文件

#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)
{
    //1、实例化一个画家
    QPainter maliang(this);

    //2、准备画笔
    QPen pen;           //无参构造
    pen.setStyle(Qt::SolidLine);      //使用实线的风格
    pen.setColor(QColor("red"));      //设置画笔颜色
    pen.setWidth(5);                 //设置画笔的粗细

    maliang.setPen(pen);


    //3、绘制钟表
    //圆盘
    maliang.translate(QPoint(this->width()/2,this->height()/2));
    maliang.drawEllipse(QPoint(0,0),200,200);

    // 绘制时钟的数字
    for (int i = 1; i <= 12; ++i) {
        // 计算数字的位置
        double angle = (i * 30) * M_PI / 180.0; // 将角度转换为弧度
        int x = 180 * cos(angle - M_PI / 2); // X坐标
        int y = 180 * sin(angle - M_PI / 2); // Y坐标

        // 设置字体和绘制数字
        maliang.setFont(QFont("Arial", 12));
        maliang.drawText(QPoint(x - 10, y + 5), QString::number(i)); // 调整位置以居中
    }

    //获取当前时间
    QTime time = QTime::currentTime();
    int hour = time.hour();
    int minute = time.minute();
    int second = time.second();


    //指针

    maliang.rotate(180);

    maliang.rotate(hour % 12 * 30 + minute / 2);
    maliang.drawLine(QPoint(0,0),QPoint(0,100));


    maliang.rotate(minute * 6 + 65);
    pen.setColor(QColor("yellow"));      //设置画笔颜色
    maliang.setPen(pen);
    maliang.drawLine(QPoint(0,0),QPoint(0,125));


    maliang.rotate(second * 6);
    pen.setColor(QColor("black"));      //设置画笔颜色
    maliang.setPen(pen);
    maliang.drawLine(QPoint(0,0),QPoint(0,150));







}

void Widget::updateClock()
{
    update();
}

2、绘制定时闹钟

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>
#include <QTime>
#include <QDebug>
#include <QMessageBox>
#include <QTimerEvent>
#include <QDateTime>
#include <QtTextToSpeech>


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_startbat_clicked();

    void timeout_slot();

    void on_closebat_clicked();

private:
    Ui::Widget *ui;

    //定义一个定时器类的指针
    QTimer *startbat;



    QTextToSpeech *speecher;      //播报员指针
};
#endif // WIDGET_H

源文件

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //给定时器申请空间
    startbat = new QTimer(this);

    //给播报员指针实例化对象
    speecher = new QTextToSpeech(this);

    //将定时器的timeout信号与自定义的槽函数进行链接
    connect(startbat,&QTimer::timeout,this,&Widget::timeout_slot);

}

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

//定时器按钮对应的槽函数
void Widget::on_startbat_clicked()
{
    if(ui->startbat->text() == "启动")
    {
        //启动一个定时器
        startbat->start(1000);

        ui->startbat->setEnabled(false);

        ui->closebat->setEnabled(true);
    }

}

//有关timeout信号对应的槽函数
void Widget::timeout_slot()
{

    QString t = ("2024-10-10  20:31:30");

    //将转换的时间展示到ui界面中的lab中
    ui->startLab->setText(t);


    QDateTime sysTime = QDateTime::currentDateTime();       //通过该函数获取当前系统的时间

    //将QTime类的对象转变成QString类的对象
    QString ts = sysTime.toString("yyyy-MM-dd  hh:mm:ss");

    //将转换的时间展示到ui界面中的lab中
    ui->presentEdit->setText(ts);

    if(ui->presentEdit->text() == ui->startLab->text())
    {
        QString msg =ui->textEdit->toPlainText();

        speecher->say(msg);

    }

}



void Widget::on_closebat_clicked()
{
    //关闭闹钟
    startbat->stop();

    //将闹钟设置成可用状态
    ui->startbat->setEnabled(true);

    ui->closebat->setEnabled(false);
}


http://www.kler.cn/a/350412.html

相关文章:

  • 【json_object】mysql中json_object函数过长,显示不全
  • Linux C\C++方式下的文件I/O编程
  • Unity补充 -- 协程相关
  • 【前端】CSS学习笔记
  • WPS数据分析000004
  • 密钥轮换时,老数据该如何处理
  • STM32—SPI通讯协议
  • Windows环境下Qt Creator调试模式下qDebug输出中文乱码问题
  • 华为OD机试 - 小朋友分组最少调整次数 - 贪心算法(Python/JS/C/C++ 2024 E卷 100分)
  • 讲一讲Redis五大数据类型的底层实现
  • libaom 源码分析:aomdec.c 文件
  • mac 桌面版docker no space left on device
  • PostgreSQL AUTO INCREMENT
  • Qt 如何 发送与解析不定长报文以及数组不定长报文
  • AUTOSAR CP, WdgM如何进行执行顺序监督的
  • Ubuntu 22.04 配置禁止密码登录,只允许密钥登录
  • 《深度学习》LSTM 长短期记忆网络 结构及原理解析
  • Redis学习笔记:跳跃表
  • nn.functional.softmax(X, dim=-1)
  • Visual Studio 2022常用快捷键
  • Elastisearch查询最近一年消费金额排名前五的用户
  • Jmeter脚本录制、Badboy脚本录制
  • Chromium html<img>对应c++接口定义
  • 【计算机毕设】springboot-考研资讯平台(附源码)
  • 五、UI弹窗提示
  • 嵌入式linux中条件变量的具体实现