qt 时钟绘制

来源:互联网 发布:紫猫编程学院全套教程 编辑:程序博客网 时间:2024/06/05 20:56

Qt 的绘制,首先看Qt文档:
The common use of QPainter is inside a widget’s paint event: Construct and customize (e.g. set the pen or the brush) the painter. Then draw. Remember to destroy the QPainter object after drawing. For example:
大致意思如下:
Qt画家通常的用法是在一个部件事件中;构造和定制的。
void MainWindow::paintEvent(QPaintEvent *event)

//创建当前时间,在以后的时钟显示的时候,有用。QTime time=QTime::currentTime(); QPainter painter(this);//画一个从坐标90,90,开始的园,直径为180。painter.setRenderHint(QPainter::Antialiasing,true);painter.setBrush(QBrush(Qt::darkGray,Qt::SolidPattern));painter.drawEllipse(90,90,180,180);    //创建一个锥形梯度,原点,焦点,都是180,180,-90代表向下的圆锥。QRadialGradient radgrient(180,180,-90,180,180);radgrient.setColorAt(0.0,Qt::darkGray); radgrient.setColorAt(0.2,Qt::white);radgrient.setColorAt(0.3,Qt::cyan);radgrient.setColorAt(1.0,Qt::white);//画一个从坐标100,100,开始的圆,直径为160,这样做是为了,让时钟外围有一个圆环包围。仅仅是为了美观而已。painter.setBrush(radgrient);painter.drawEllipse(100,100,160,160);//世界坐标转换,这样做的意思就是将坐标系建在180,180,的位置。这个时候这个点的实质的坐标是0,0.painter.translate(180,180);painter.save();//开始绘制时针,分针,秒针的颜色。参数以此为,red,green,blue,和透明度。QColor hour(200,10,50,150);QColor min(10,100,100,150);QColor sec(10,10,200,150);//绘制分针刻度线for (int i=1;i<=60;i++){    //绘制5个像素点长度的刻度线        painter.drawLine(0,-80,0,-75); //这个时候可以看上面的世界坐标转换。圆心坐标180,180,为坐标系原点,        他的上方,和左边为负数,右边,和下面为整数。好好思考。应该可以理解        painter.rotate(6); //一分钟,或者一秒旋转6度。其实本质是坐标系旋转6度。}// painter.setPen(hour);//绘制时针刻度线for (int i=1;i<=60;i++){    if(i%5==0)    {     //绘制5个像素点长度的刻度线        painter.setPen(Qt::red|Qt::cyan);        painter.drawLine(0,-80,0,-70);        painter.rotate(30);        painter.setPen(Qt::red|Qt::blue);        //在-3,-60,的位置添加每个刻度代表的数字。其实位置应该是0,-60,为了美观,位置有些偏差。       //tr("%1").arg(i/5)这个函数,是将数字转换成个字符串,默认情况,是以10进制转换.具体看Qt文档        painter.drawText(-3,-60, tr("%1").arg(i/5));    }}painter.restore();//绘制时针,分针,秒针的形状。四个坐标,那就是四边形。注意坐标一定要按顺序写,不然是一个不规则的形状。QPoint  handhour[4]={    QPoint(0,-40),    QPoint(3,0),    QPoint(0,6),    QPoint(-3,0),};QPoint  handsec[4]={    QPoint(0,-60),    QPoint(3,0),    QPoint(0,6),    QPoint(-3,0),};QPoint  handmin[4]={    QPoint(0,-50),    QPoint(3,0),    QPoint(0,6),    QPoint(-3,0),};//显示时针的位置painter.setPen(Qt::NoPen);painter.setBrush(hour);painter.save();painter.rotate(30.0*(time.hour()+time.minute()/60));painter.drawConvexPolygon(handhour,4); //绘制多边形函数。painter.restore();//切记旋转之后,一定要复位,不然,分针的旋转会在时针的基础上旋转。//显示分针的位置painter.setPen(Qt::NoPen);painter.setBrush(min);painter.save();painter.rotate(6.0*(time.minute()+time.second()/60));painter.drawConvexPolygon(handmin,4);painter.restore();//显示秒针位置painter.setPen(Qt::NoPen);painter.setBrush(sec);painter.save();painter.rotate(time.second()*6);painter.drawConvexPolygon(handsec,4);painter.restore();

}


        主函数

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//设置一个定时器,超过1000毫秒时,发射timeout()信号,触发update()槽函数。进行时间更新
QTimer *time=new QTimer;
time->start(1000);
connect(time,SIGNAL(timeout()),this,SLOT(update()));
}

MainWindow::~MainWindow()
{
delete ui;
}运行图片

原创粉丝点击