QT表盘实验

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

你可能感兴趣的:(命令模式)