Qt 간단 한 동적 시계 구현
퀘 스 트 구현:
Qt 언어 로 타 이 머 를 사용 하여 간단 한 동적 시 계 를 실현 합 니 다.
구현 효과:
실현 과정:
전체 과정 은 주로 두 부분 으로 나 뉜 다.
1.시계 판 에 필요 한 요 소 를 그립 니 다.시 분 초 바늘,눈금,시계 배경 그림 도 삽입 할 수 있 습 니 다.
2.그 려 진 바늘 을 움 직 이게 합 니 다(타 이 머 를 사용 하고 시스템 시간 을 연결 합 니 다).
전체 코드:
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
void paintEvent(QPaintEvent *event);
void drawSecond(QPainter *painter);
void drawMinute(QPainter *painter);
void drawHour(QPainter *painter);
void drawClock(QPainter *painter);
private:
Ui::Dialog *ui;
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QPainter>
#include <QTime>
#include <QTimer>
#include <QPixmap>
#include <QPen>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
resize(959,959);
setWindowTitle("My Clock");
QTimer *timer = new QTimer(this);
timer->start(1000);
//
connect(timer,SIGNAL(timeout()),this,SLOT(update()));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QPixmap map(":/Resrouse/Pic.jpg");
QRect q(0,0,959,959);
QRect q2(0,0,width(),height());
painter.drawPixmap(q2,map,q);
//
painter.setRenderHint(QPainter::Antialiasing,true);
// ,
painter.setWindow(0,0,200,200);
//
painter.translate(100,100);
// ,
drawClock(&painter);
drawSecond(&painter);
drawMinute(&painter);
drawHour(&painter);
}
void Dialog::drawSecond(QPainter *painter)
{
static const QPoint Second[4]=
{
QPoint(2, 5),
QPoint(0, 18),
QPoint(-2, 5),
QPoint(0, -90)
};
// currentTime();
QTime time = QTime::currentTime();
//
painter->setBrush(Qt::red);
painter->setPen(Qt::red);
//save
painter->save();
// ( )
painter->rotate(6.0*time.second());
painter->drawConvexPolygon(Second,4);
//ratate
painter->restore();
}
void Dialog::drawMinute(QPainter *painter)
{
static const QPoint Minute[4]=
{
QPoint(2, 5),
QPoint(0, 16),
QPoint(-2, 5),
QPoint(0, -70)
};
QTime time = QTime::currentTime();
painter->setBrush(Qt::blue);
painter->setPen(Qt::blue);
painter->save();
painter->rotate(6.0*(time.minute()+time.second()/60.0));
painter->drawConvexPolygon(Minute,4);
painter->restore();
}
void Dialog::drawHour(QPainter *painter)
{
static const QPoint Hour[4]=
{
QPoint(2, 5),
QPoint(0, 13),
QPoint(-2, 5),
QPoint(0, -40)
};
QTime time = QTime::currentTime();
painter->setBrush(Qt::yellow);
painter->setPen(Qt::yellow);
painter->save();
painter->rotate(30.0*(time.hour()+time.minute()/60.0));
painter->drawConvexPolygon(Hour,4);
painter->restore();
}
void Dialog::drawClock(QPainter *painter)
{
QPen pen;
pen.setWidth(2);
pen.setColor(Qt::white);
painter->setPen(pen);
//
for (int i = 1; i <=60; ++i)
{
painter->save();
painter->rotate(6*i);// 6
//
if (i % 5 == 0)
{
painter->drawLine(0, -98, 0, -82);
painter->drawText(-20, -82, 40, 40,Qt::AlignHCenter | Qt::AlignTop,QString::number(i/5));
}
else
{
painter->drawLine(0, -98, 0, -88);
}
painter->restore();//
}
}
디스크 그리 기:paintEvent()함 수 를 사용 하여 각 포인터 의 크기 위 치 를 구조 체 형식 으로 저장 하고 그립 니 다.
다음은 초침 으로 그립 니 다.
void Dialog::drawSecond(QPainter *painter)
{
static const QPoint Second[4]=
{
QPoint(3, 5),
QPoint(0, 18),
QPoint(-3, 5),
QPoint(0, -90)
};
// currentTime();
QTime time = QTime::currentTime();
//
painter->setBrush(Qt::red);
painter->setPen(Qt::red);
//save
painter->save();
// ( )
painter->rotate(6.0*time.second());
painter->drawConvexPolygon(Second,4);
//ratate
painter->restore();
}
호출 시간:타 이 머 를 1000 ms,즉 1s 로 설정 합 니 다.
QTimer *timer = new QTimer(this);
timer->start(1000);
//
connect(timer,SIGNAL(timeout()),this,SLOT(update()));
기타:1.그림 삽입:
map 의 내용 은 자체 가 져 온 자원 파일 로 바 꿀 수 있 습 니 다.
QPixmap map(":/Resrouse/Pic.jpg");
QRect q(0,0,959,959);
QRect q2(0,0,width(),height());
painter.drawPixmap(q2,map,q);
2.색상 변경 그리 기:
QPen pen;
//
pen.setWidth(2);
//
pen.setColor(Qt::white);
//
painter->setPen(pen);
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 프로 그래 밍 은 사용자 정의 컨트롤 을 기반 으로 시계 기능 을 구현 하 는 방법 입 니 다.이 사례 는 안 드 로 이 드 프로 그래 밍 이 사용자 정의 컨트롤 을 바탕 으로 시계 기능 을 실현 하 는 방법 을 보 여 준다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.