📄 clockwidget.cpp
字号:
#include<QtGui>
#include<QtCore>
#include "ClockWidget.h"
MyTime *mytime=new MyTime();
extern QTimeEdit *timeEdit;
//构造函数
MyTime :: MyTime()
{
hour=0;
minute=0;
second=0;
}
ClockWidget :: ClockWidget(QWidget *parent)
:QWidget(parent)
{
QTime curtime0 = QTime::currentTime();
QTimeEdit *timeEdit=new QTimeEdit(this);
timeEdit->setGeometry(360,400,150,45);
QLabel *label=new QLabel(tr ("时间"));
label->setGeometry(360,250,60,30);
QHBoxLayout *topLeftLayout = new QHBoxLayout;
topLeftLayout->addWidget (label);
QVBoxLayout *leftLayout = new QVBoxLayout;
leftLayout->addLayout (topLeftLayout);
startTimer(1000);
setMinimumSize(250,250);
setMaximumSize(300,300);
setWindowTitle("my clock!");
//时间默认值
mytime->setHour(curtime0.hour());
mytime->setMinute(curtime0.minute());
mytime->setSecond(curtime0.second());
//时间显示窗口与钟表的连接
connect(timeEdit,SIGNAL(timeChanged(timeEdit)),mytime,SLOT(getHms(timeEdit.hour(),timeEdit.minute(),timeEdit.second())));
}
void ClockWidget :: timerEvent(QTimerEvent *)
{
update();
}
void ClockWidget :: paintEvent(QPaintEvent *)
{
if(mytime->second>59){
mytime->second=mytime->second%60;
if(mytime->second==0)
mytime->minute++;
}
if(mytime->minute>59){
mytime->minute=mytime->minute%60;
if(mytime->minute==0)
mytime->hour++;
}
if(mytime->hour>11)mytime->hour=mytime->hour%12;
mytime->second++;
QPainter painter(this);
painter.setWindow(-30,-30,60,60);
painter.save();
painter.setBrush(Qt::white);
painter.drawEllipse(QPoint::QPoint(0,0),30,30);
painter.restore();
//画时针
painter.save();
painter.rotate(30*(mytime->hour%12)+mytime->minute/2);
painter.setPen(Qt::black);
painter.drawLine(-2,0,15,0);
painter.restore();
//画分针
painter.save();
painter.rotate(mytime->minute*6+0.1*mytime->second);
painter.setPen(Qt::blue);
painter.drawLine(-5,0,25,0);
painter.restore();
//画秒针
painter.save();
painter.rotate((mytime->second-25)*6);
painter.setPen(Qt::red);
painter.drawLine(-10,0,30,0);
painter.restore();
//画时钟刻度
//大刻度
painter.save();
painter.setPen(Qt::red);
for(int i=0;i<12;i++)
{
painter.rotate(30);
painter.drawLine(28,0,30,0);
}
painter.restore();
//小刻度
painter.save();
painter.setPen(Qt::blue);
for(int j=0;j<60;j++)
{
if((j%5)!=0)
painter.drawLine(29,0,30,0);
painter.rotate(6.0);
}
painter.restore();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -