QT 基础学习

发布于:2024-09-17 ⋅ 阅读:(118) ⋅ 点赞:(0)

1> 使用绘制事件完成钟表的绘制

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QDebug>
#include <QTime>
#include <QTimer>
#include <QDateTime>
//#include <string>
#include <QPixmap>

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 timeout_slot();


private:
    Ui::Widget *ui;
    //实例化一个膜
    QPixmap *pix;
    //定义一个定时器变量
    QTimer t1;

};
#endif // WIDGET_H

源文件

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

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

    //实例化屏幕膜
    pix = new QPixmap(this->size());      //实例化一个膜大小跟当前界面一致
    pix->fill(Qt::white);               //使用白色进行填充

    //将时间函数与t1绑定在一起
    t1.start(1000);
    connect(&t1, &QTimer::timeout, this, &Widget::timeout_slot);
}

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

void Widget::paintEvent(QPaintEvent *event)
{

    //1、准备一个画家,在界面上进行绘制
    QPainter p2(this);
     //2、将pix绘制到界面上
    p2.drawPixmap(QPoint(0,0), *pix);

    //实例化一个画家
    QPainter painter(this);

    //准备画笔
    QPen pen;
    pen.setStyle(Qt::SolidLine);
    pen.setColor(QColor("black"));
    pen.setWidth(5);

    //准备字体
    QFont font;
    font.setFamily("楷体");        //设置字体族
    font.setStyle(QFont::StyleItalic);    //设置字体倾斜
    font.setPointSize(13);             //设置字号

    //将画家和笔绑定
    painter.setPen(pen);

    //给画家安排字体
    painter.setFont(font);

    //在屏幕中间画一个圆
    painter.translate(this->width()/2,this->height()/2);
    int radius=this->width()>this->height()?this->height():this->width();
    painter.drawEllipse(QPoint(0,0),radius/2-10,radius/2-10);

    //将坐标轴变成正方向
    painter.rotate(6+180);

    //绘制钟表
    for(int i=1;i<=60;i++)
    {
        if(i%5!=0)
        {
            painter.drawLine(0,radius/2-20,0,radius/2-10);
        }else
        {
            painter.drawLine(0,radius/2-30,0,radius/2-10);
            // 将整数 i 转换为 QString
            QString str = QString::number(i/5);
            painter.drawText(QPoint(0,radius/2-30-10),str);
        }

        painter.rotate(6);
    }
    painter.rotate(-6);
}


void Widget::timeout_slot()
{
    pix->fill(Qt::white);
    QTime sysTime = QTime::currentTime();

    // 分别提取小时、分钟和秒
    int hours = sysTime.hour();
    int minutes = sysTime.minute();
    int seconds = sysTime.second();
    qDebug()<<seconds;


    //实例化一个画家
    QPainter painter(pix);

    //准备画笔
    QPen pen;
    pen.setStyle(Qt::SolidLine);
    
    //将坐标轴移到中点
    painter.translate(this->width()/2,this->height()/2);

    //将坐标轴变成秒针反向
    painter.rotate(180+6*seconds);

    //2、使用画家画秒针
    pen.setColor(QColor("green"));
    pen.setWidth(5);
    painter.setPen(pen);
    painter.drawLine(0,-20,0,200);


    //将坐标轴变成秒针方向
    painter.rotate(360-6*seconds+6*minutes);

    //2、使用画家画分针
    pen.setColor(QColor("blue"));
    pen.setWidth(10);
    painter.setPen(pen);
    painter.drawLine(0,-15,0,150);      

    //将坐标轴变成秒针方向
    painter.rotate(360+30*hours-6*minutes);

    //2、使用画家画时针
    pen.setColor(QColor("red"));
    pen.setWidth(15);
    painter.setPen(pen);
    painter.drawLine(0,-10,0,100);      

    //3、更新界面内容
    this->update();

}



 


网站公告

今日签到

点亮在社区的每一天
去签到