#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
//给定时器实例化对象空间【对象版】
t = new QTimer(this);
t->start(1000); //启动定时器,自动发射一个timeout信号,将此信号连接自定义的槽函数,每隔一定时间,系统会自动调用自定义的槽函数
//QMainWindow类的 update()成员函数被调用时,窗口部件会收到绘制事件
connect(t, SIGNAL(timeout()), this, SLOT(update())); //连接信号槽,定时器超时触发窗体更新
}
//定义绘制事件的处理函数【重定义】
void MainWindow::paintEvent(QPaintEvent *event)
{
//实例化一个画家类
QPainter p(this);
//给画家设置画笔
p.setPen(QColor(77,65,182));
//给画家设置字体
p.setFont(QFont("Consolas"));
//绘制画家坐标起点
p.translate(this->width()/2,this->height()/2);
//绘制矢量文字
// p.drawText(this->rect(), "Hello World"); // 绘制在最顶部
// p.drawText(this->width()/2,this->height()/2,"LQS"); //此时使用的画笔临时坐标
// p.drawText(QPoint(0, 0),"LQS");
//画家的旋转角度
// p.rotate(45);
//填充颜色
p.setBrush(QBrush(QColor(250,240,230))); //表盘的背景色
//画一个圆形
// p.drawEllipse(0,0,200,100);
// p.drawEllipse(QPoint(this->width()/2,this->height()/2),200,100);
p.drawEllipse(QPoint(0, 0),200,200);
//时刻表
//给画家设置画笔
p.setPen(QColor("black"));
for(int i = 0; i < 60; i++)
{
//绘制小短线
p.drawLine(200, 0, 190,0);
p.rotate(6);
}
//小时时刻
QPen pen;
pen.setWidth(3);
p.setPen(pen);
for(int i = 1; i <= 12; i++)
{
p.rotate(30);
//绘制小短线
p.drawLine(0,200, 0,185);
p.rotate(-2);
p.drawText(0,-170,QString("%1").arg(i));
p.rotate(2);
}
//获取当前时间
QTime sysTime = QTime::currentTime();
//将系统时间转换为字符串
QString time_str = sysTime.toString();
//字符串拆分出来
int hh,mm,ss;
QStringList list_time = time_str.split(":");
hh = list_time[0].toUInt();
mm = list_time[1].toUInt();
ss = list_time[2].toUInt();
// qDebug()<<"时间输出";
// qDebug()<
// qDebug()<
// qDebug()<
//秒针绘制
// p.setPen(QPen(Qt::green, 2));
p.setPen(QPen(QColor("green"), 2));
p.rotate(ss*6);
p.drawLine(QPoint(0,-190),QPoint(0,5));
p.rotate(-(ss*6));
//分针绘制
p.setPen(QPen(QColor("blue"), 2));
p.rotate(mm*6 + ss*6/60);
p.drawLine(QPoint(0,-120),QPoint(0,5));
p.rotate(-(mm*6 + ss*6/60));
//时针绘制
p.setPen(QPen(QColor("magenta"), 2));
p.rotate(hh*30 + mm*6/12 + ss*6/60/12);
p.drawLine(QPoint(0,-120),QPoint(0,5));
p.rotate(-(hh*30 + mm*6/12 + ss*6/60/12));
update();
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
//执行启动逻辑【按压鼠标,使用定时器】
t_id = this->startTimer(1000);
}
//还没复习课上内容完,本程序有待优化。另外一道作业来不及做
//重写的定时器事件处理函数【上面的函数发送信号后,自动执行该程序】
void MainWindow::timerEvent(QTimerEvent *event)
{
//event表示已经超时的定时器
//可以使用event的成员函数timeid来获取已经到位的定时器标识符
if(event->timerId() == t_id) //判断到达事件的id是否为我定义的id【判断是否为我的定时器】调用的函数都是timerEvent这一个
{
//日期事件
//获取系统日期时间
QDateTime sysDate = QDateTime::currentDateTime();
//将日期时间转换为字符串
QString date_str = sysDate.toString("yyyy-MM-dd hh:mm:ss");
QString time_str = sysDate.toString("hh:mm:ss");
//将字符串输出到ui界面
ui->label_show->setText(date_str);
QFont ft;
ft.setPointSize(14); //时间显示的大小
ui->label_show->setFont(ft);
//字符串拆分出来
int hh,mm,ss;
QStringList list_date = time_str.split(":");
hh = list_date[0].toUInt();
mm = list_date[1].toUInt();
ss = list_date[2].toUInt();
}
}