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.효과 도
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 프로 그래 밍 은 사용자 정의 컨트롤 을 기반 으로 시계 기능 을 구현 하 는 방법 입 니 다.이 사례 는 안 드 로 이 드 프로 그래 밍 이 사용자 정의 컨트롤 을 바탕 으로 시계 기능 을 실현 하 는 방법 을 보 여 준다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.