自学内容网 自学内容网

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


原文地址:https://blog.csdn.net/fantasy_time_/article/details/142833323

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!