Qt 간단 한 시계 그리 기

3981 단어 Qt클 록
본 논문 의 사례 는 Qt 가 간단 한 시 계 를 그 리 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
개술
(1)기본 원리
간단 한 기하학 적 도형 을 이용 하여 시계 판 과 지침 을 그 린 다음 에 시스템 시간 에 따라 지침 의 편전 각 도 를 조정 하여 시 뮬 레이 션 시계의 효 과 를 얻는다.
그 중에서 자신 이 좋아 하 는 배경 자원 을 더 해 다양한 스타일 의 시 계 를 디자인 할 수 있다.
(2)부분 함수 설명
① 색조 와 충전

painter.setBrush(Qt::red); //    ,    (  )
painter.setPen(Qt::red);  //    ,      (  )
② 톱날 저항(도형 외곽 의 톱날 모양 을 줄 여 선 을 매 끄 럽 게 한다)

painter.setRenderHint(QPainter::Antialiasing,true);
③ 자동 저장 및 복구

painter.save();  //    
painter.restore(); //    
핵심 코드
dialog.h 파일

class Dialog : public QDialog
{
 Q_OBJECT

public:
 Dialog(QWidget *parent = nullptr);
 ~Dialog();

 void Dialog::paintEvent(QPaintEvent *); //    

private:
 Ui::Dialog *ui;
};
헤더 파일

#include <QPainter>
#include <QPoint>
#include <QTime>
#include <QTimer>
#include <QPixmap>
#include <math.h>
포인터 인자(첫 번 째 QPoint 전에 static 추가 가능)

QPoint sec[4]={QPoint(0,-80),QPoint(2,0),QPoint(0,8),QPoint(-2,0)};
QPoint min[4]={QPoint(0,-62),QPoint(4,0),QPoint(0,10),QPoint(-4,0)};
QPoint hour[4]={QPoint(0,-48),QPoint(5,0),QPoint(0,11),QPoint(-5,0)};
연관 함수

Dialog::Dialog(QWidget *parent)
 : QDialog(parent)
 , ui(new Ui::Dialog)
{
 ui->setupUi(this);
 resize(300,300);

 QTimer * timer = new QTimer(this);
 timer->start(1000); //      (   1000  =1 )
 connect(timer,SIGNAL(timeout()),this,SLOT(update())); //update()       ,         
}
그림 함수(주의:시간,분,초 세 개의 포인터 가 하 나 를 임의로 완성 하면 나머지 두 개 는 포인터 회전 각도 규칙 을 수정 하고 나머지 속성 이 같 으 면 됩 니 다)

void Dialog::paintEvent(QPaintEvent *){
 QPainter painter(this);

 //    
 QRect q1(20,20,0.5*512,0.5*512);
 QRect q2(0,0,512,512);
 QPixmap map(":/b/ClockBack/clockback.png");
 painter.drawPixmap(q1,map,q2);

 QTime time=QTime::currentTime(); //      

 //  
 painter.setRenderHint(QPainter::Antialiasing,true); //   ,   
 painter.setPen(QPen(Qt::white,6,Qt::SolidLine));  //  
 painter.translate(50,50);
 painter.drawEllipse(0,0,198,198);

 //    
 painter.translate(99,99);

 //  
 painter.setRenderHint(QPainter::Antialiasing,true);
 painter.setBrush(Qt::red); //    ,    
 painter.setPen(Qt::red);  //    ,      
 painter.save();    //    
 painter.rotate(6.0*time.second());
 painter.drawPolygon(sec,4); //    (        )
 painter.restore();   //    

 //  (   )
 painter.setRenderHint(QPainter::Antialiasing,true);
 painter.setBrush(Qt::white);
 painter.setPen(Qt::white);
 painter.save();
 painter.rotate(6.0*time.minute()+time.second()/60.0);
 painter.drawPolygon(min,4);
 painter.restore();

 //  (   )
 painter.setRenderHint(QPainter::Antialiasing,true);
 painter.setBrush(Qt::black);
 painter.setPen(Qt::black);
 painter.save();
 painter.rotate(30.0*time.hour()+time.minute()/60.0);
 painter.drawPolygon(hour,4);
 painter.restore();

 //    
 //   (    )
 for(int i=1;i<=12;i++){
  painter.rotate(30);
  painter.drawLine(0,-100,0,-85);
 }
 
 //   
 for(int i=1;i<=60;i++){
  painter.rotate(6);
  painter.drawLine(0,-94,0,-90);
 }
}
배경 과 효과 도
1.제 가 사용 한 배경 을 공유 합 니 다.

2.효과 도

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기