taowidget.h
#ifndef _TAOWIDGET_H_
#define _TAOWIDGET_H_
#include <QWidget>
class QTimer;
class TaoWidget : public QWidget
{
public:
TaoWidget( QWidget * = 0 );
protected:
void paintEvent( QPaintEvent * );
private:
QTimer *timer;
int degree;
};
#endif
taowidget.cpp
#include "taowidget.h"
#include <QtGui>
TaoWidget::TaoWidget( QWidget *parent )
:QWidget( parent ), degree( 0 )
{
timer = new QTimer( this );
connect( timer, SIGNAL( timeout() ), this, SLOT( update() ) );
timer->start( 10 );
}
void TaoWidget::paintEvent( QPaintEvent * )
{
QPainter painter( this );
QPen blackPen( Qt::black, 2 );
painter.setPen( blackPen );
painter.setRenderHint( QPainter::Antialiasing, true );
painter.translate( width() / 2.0, height() / 2.0 );
painter.rotate( degree );
degree = ( degree + 1 ) % 360;
int side = qMin( width(), height() ) - 4;
QRectF rect( -side / 2.0, - side / 2.0, side, side );
painter.drawEllipse( rect );
painter.setBrush( Qt::black );
painter.setPen( Qt::NoPen );
painter.drawPie( rect, -90 * 16, 180 * 16 );
QPointF center = rect.center();
QRectF bottomRect( center.x() - side / 4.0,
center.y() + 1.0, side / 2.0, side / 2.0 );
painter.drawEllipse( bottomRect );
painter.setBrush( Qt::white );
QRectF topRect( center.x() - side / 4.0,
rect.top() + 1.0, side / 2.0, side / 2.0 );
painter.drawEllipse( topRect );
QPointF bottomCenter = bottomRect.center();
QRectF whiteRect( bottomCenter.x() - side / 20.0, bottomCenter.y() - side/20.0,
side / 10.0, side / 10.0 );
painter.drawEllipse( whiteRect );
QPointF topCenter = topRect.center();
QRectF blackRect( topCenter.x() - side / 20.0, topCenter.y() - side / 20.0,
side / 10.0, side / 10.0 );
painter.setBrush( Qt::black );
painter.drawEllipse( blackRect );
}
main.cpp#include "taowidget.h"
#include <QApplication>
int main(int argc, char **argv )
{
QApplication app( argc, argv );
TaoWidget widget;
widget.show();
return app.exec();
}