QT焦度计核心绘图

来源:互联网 发布:hex转ascii算法 编辑:程序博客网 时间:2024/06/06 03:01
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QGroupBox>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow(); void paintEvent(QPaintEvent *event); void mouseMoveEvent(QMouseEvent *event); QRectF textRectF(double radius, int pointSize, double angle);private: int     m_x; int     m_y;    Ui::MainWindow *ui;};#endif // MAINWINDOW_H
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QGridLayout>#include<cmath>#include <QRectF>#include <QPainter>#include <QTimer>#include <QTime>#include <QPaintEvent>#include <QDebug>#include <complex>#include <QPoint>using namespace std;MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);}MainWindow::~MainWindow(){    delete ui;}QRectF MainWindow::textRectF(double radius, int pointSize, double angle){    QRectF rectF;    rectF.setX(radius*cos(angle*3.1415/180.0) - pointSize*2);    rectF.setY(radius*sin(angle*3.1415/180.0) - pointSize/2.0);    rectF.setWidth(pointSize*4);    rectF.setHeight(pointSize);    return rectF;}void MainWindow::paintEvent(QPaintEvent *event){    Q_UNUSED(event);    // 时针、分针、秒针颜色    QColor hourColor(200, 100, 0, 200);    QColor minuteColor(0, 127, 127, 150);    //设置宽度表盘    int side = qMin(width(), height());    //定义一个painter    QPainter painter(this);    //设置    painter.setRenderHint(QPainter::Antialiasing);    // 平移坐标系原点至中心点    painter.translate(width() / 2, height() / 2);    // 缩放    painter.scale(side / 200.0, side / 200.0);    //使复原    //    painter.restore();    //重新设置颜色    painter.setPen(hourColor);    // 绘制小时线 (360度 / 12 = 30度)    for (int i = 0; i < 12; ++i) {        painter.drawLine(88, 0, 96, 0);        painter.rotate(30.0);    }    painter.drawLine(0, -65, 0, 65);    painter.drawLine(65, 0, -65, 0);//画交叉线    painter.setPen(QPen(QColor(0, 160, 230), 2));    painter.drawEllipse(QPoint(m_x-width() / 2,m_y-height() / 2), 10, 10);//画圆    //    qDebug()<<m_x;    //    qDebug()<<m_x;    if(abs(m_x-width()/2)<60&&abs(m_y-height()/2)<60)    {        painter.drawLine(-4, 4, -4,13);        painter.drawLine(-4, 4, -13,4);        painter.drawLine(4, 4, 4,13);        painter.drawLine(4, 4, 13,4);        painter.drawLine(4, -4, 13,-4);        painter.drawLine(4, -4, 4,-13);        painter.drawLine(-4, -4, -4,-13);        painter.drawLine(-4, -4, -13,-4);    }    //设置分钟线颜色    painter.setPen(minuteColor);    // 绘制分钟线 (360度 / 60 = 6度)    for (int j = 0; j < 60; ++j) {        if ((j % 5) != 0)        {            painter.drawLine(92, 0, 96, 0);        }        painter.rotate(6.0);    }    painter.setPen(hourColor);    //设置小时文本    int radius = (width()-80)/4;//设置半径    QFont font = painter.font();    font.setBold(true);    painter.setFont(font);    int pointSize = font.pointSize();    // 绘制小时文本    int nHour = 0;    for (int i = 0; i < 12; ++i) {        nHour = i + 3;        if (nHour > 12)            nHour -= 12;        painter.drawText(textRectF(radius*0.8, pointSize, i * 30), Qt::AlignCenter, QString::number(nHour));    }    if(1){        sqrt(pow(abs(m_x-width() / 2-width() / 2),2)+pow(abs(m_y-height() / 2-height() / 2),2));        double a=acos(abs(m_x-width() / 2-width() / 2)/sqrt(pow(abs(m_x-width() / 2-width() / 2),2)+pow(abs(m_y-height() / 2-height() / 2),2)));        painter.setPen(QColor(0, 0, 0, 200));       if(a>0.5){       painter.rotate(a*180/3.1415);       }else{        painter.rotate(a*180/3.1415+90);       }        painter.drawLine(92, 0, 96, 0);        painter.rotate(180.0);        painter.drawLine(92, 0, 96, 0);        painter.rotate(180.0);        painter.rotate(360.0-a);    }}void MainWindow::mouseMoveEvent(QMouseEvent *event){    m_x=event->x();    m_y=event->y();    update();}



 
原创粉丝点击