Qt-day4

1、时钟

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

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

    //给定时器指针实例化对象
    timer = new QTimer(this);
    //将该定时器的timeout信号连接到自定义槽函数中
    connect(timer, &QTimer::timeout, this, &Widget::timeout_slot);
}

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

//绘制事件处理函数的定义
void Widget::paintEvent(QPaintEvent *event)
{
    //实例化一个画家
    QPainter painter(this);

    //获取当前时间
    QTime Time = QTime::currentTime();

    //实例化一个画笔
    QPen pen;
    pen.setColor(QColor("hotpink"));   //表盘外框颜色
    pen.setStyle(Qt::SolidLine);       //设置线型:实线
    pen.setWidth(4);                   //线的粗细
    //将画笔给画家安排上
    painter.setPen(pen);

    //给画家偏移起始坐标点
    painter.translate(this->width()/2, this->height()/2);

    //给画家安排画刷
    painter.setBrush(QBrush(QColor("grey")));

    //画个圆形(时钟
    painter.drawEllipse(QPoint(0,0), 160, 160);

    //刻度
    for(int i=0; i<60; i++)
    {
        painter.drawLine(160,0,154,0);
        painter.rotate(6);
    }

    painter.setFont(QFont("隶书",14));
    //小时
    for(int i=1; i<=12; i++)
    {
        painter.rotate(30);
        painter.drawLine(0, -160, 0, -145);
        painter.drawText(-10, -125, QString("%1").arg(i));
    }

    painter.save();

    int hour = Time.hour();    // 获取当前的小时
    int minute = Time.minute();     // 获取当前的分钟
    double hourAngle = (hour%12 + minute/60.0)*30.0;  // 计算时针的角度
    painter.rotate(hourAngle);    // 旋转坐标系,使时针指向正确的位置

    QPen pen1;
    pen1.setColor(QColor("darkred"));      //设置时针颜色
    pen1.setStyle(Qt::SolidLine);               //实线
    pen1.setWidth(6);

    //将画笔给画家安排上
    painter.setPen(pen1);
    //画一条直线
    painter.drawLine(0, 0, 0, 80);

    painter.save();

    //绘制分针
    double minuteAngle = minute*6.0;
    painter.rotate(minuteAngle);

    QPen pen2;
    pen2.setColor(QColor("lightpink"));      //设置时针颜色
    pen2.setStyle(Qt::SolidLine);               //实线
    pen2.setWidth(4);
    //将画笔给画家安排上
    painter.setPen(pen2);
    painter.drawLine(0, 0, 0, 110);

    painter.save();

    //绘制秒针
    int second = Time.second();
    double secondAngle = second * 6.0;
    painter.rotate(secondAngle);

    QPen pen3;
    pen3.setColor(QColor("inen"));      //设置时针颜色
    pen3.setStyle(Qt::SolidLine);               //实线
    pen3.setWidth(2);
    //将画笔给画家安排上
    painter.setPen(pen3);
    painter.drawLine(0, 0, 0, 140);

    painter.restore();

}

void Widget::timeout_slot()
{
    update();
}

ui界面:

2、思维导图

相关推荐
Larry_Yanan3 小时前
QML学习笔记(三十一)QML的Flow定位器
java·前端·javascript·笔记·qt·学习·ui
Larry_Yanan3 小时前
QML学习笔记(三十)QML的布局器(Layouts)
c++·笔记·qt·学习·ui
feiyangqingyun3 小时前
Qt编写上下界面切换效果/前进到下一个界面/后退到上一个页面/零件工艺及管理设计系统
qt·零件工艺
ajassi20004 小时前
开源 C++ QT QML 开发(十五)通讯--http下载
c++·qt·开源
枫叶丹46 小时前
【Qt开发】输入类控件(六)-> QDial
开发语言·qt
咯哦哦哦哦7 小时前
关于QT 打印中文 乱码问题
java·数据库·qt
mark-puls7 小时前
Qt界面布局利器:QStackedWidget详细用法解析
开发语言·qt
执尺量北斗11 小时前
LinkMate 智能会议室系统:基于 Qt / QML / WebRTC / FFmpeg / Whisper / OpenGL 的实时音视频会议平台
qt·ffmpeg·webrtc
共享家952721 小时前
QT-常用控件(二)
开发语言·qt
江公望1 天前
Qt QThread使用方法入门浅解
c++·qt