QT 基础学习
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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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 转换为 QStringQString 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();}