|
#include
#include
#include
#include
#include
#include
class MyWidget:public QWidget
{
public:
MyWidget();
protected:
void paintEvent(QPaintEvent *event);
QTimer *timer;
};
MyWidget::MyWidget()
{
timer=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(update()));
timer->start(1000);
resize(200,200);
setWindowTitle(tr("Clock"));
}
void MyWidget::paintEvent(QPaintEvent *)
{
QTime time=QTime::currentTime();
QPainter painter(this);
painter.translate(width()/2,height()/2);
painter.setRenderHint(QPainter::Antialiasing);
int side=qMin(width(),height());
painter.scale(side/200.0,side/200.0);
painter.drawText(-20,-80,QVariant(time).toString());
static const QPoint hourHand[3] = {
QPoint(-7, 8),
QPoint(7, 8),
QPoint(0, -40)
};
painter.save();
painter.setPen(Qt::NoPen);
painter.setBrush(Qt::blue);
painter.rotate(30*((time.hour()+time.minute()/60.0)));
painter.drawConvexPolygon(hourHand, 3);
painter.restore();
for(int i=0;i<12;++i)
{
painter.drawLine(90,0,100,0);
painter.rotate(30.0);
}
static const QPoint minuteHand[3]=
{
QPoint(-7,8),
QPoint(7,8),
QPoint(0,-70)
};
painter.setBrush(QColor(0,127,127,100));
for(int j=0;j<60;++j)
{
if((j%5)!=0)
painter.drawLine(80,0,90,0);
painter.rotate(6.0);
}
painter.save();
painter.setBrush(QColor(127,127,100));
painter.rotate(6.0*(time.minute()+time.second()/60.0));
painter.drawConvexPolygon(minuteHand,3);
painter.restore();
static const QPoint secondHand[3]=
{
QPoint(-7,8),
QPoint(7,8),
QPoint(0,-90)
};
painter.save();
painter.setBrush(QColor(255,0,0,190));
painter.rotate(6.0*(time.second()));
painter.drawConvexPolygon(secondHand,3);
painter.restore();
}
int main(int argc,char **argv)
{
QApplication app(argc,argv);
MyWidget s;
s.show();
return app.exec();
}
|
|