|
改写模拟时钟代码: #include <QWidget> #include <QApplication> #include <QPainter> #include <QTime> #include <QTimer> #include <QVariant> 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(); }
|