Chinaunix首页 | 论坛 | 博客
  • 博客访问: 287422
  • 博文数量: 59
  • 博客积分: 1346
  • 博客等级: 中尉
  • 技术积分: 461
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-06 17:17
文章分类

全部博文(59)

文章存档

2012年(9)

2011年(50)

分类: C/C++

2011-08-05 19:52:59

本文章原创于 转载请注明出处。

接着上一次的教程,这次我们学习在窗体上绘制路径。QPainterPath这个类很有用,这里我们只是说明它最常使用的功能,更深入的以后再讲。

1.我们更改paintEvent函数如下。

void Dialog::paintEvent(QPaintEvent *)
{
   
QPainterPath path;

    path.addEllipse(100,100,50,50);  //添加一个椭圆
    path.lineTo(200,200);            //从当前坐标点画线到这个坐标点(x,y)

    QPainter painter(this);
    painter.setPen(Qt::green);
    painter.setBrush(Qt::yellow);

    painter.drawPath(path);
}

这里我们新建了一个painterPath对象,并加入了一个圆和一条线。然后绘制这个路径。

效果如下。


2.上面绘制圆和直线都有对应的函数啊,为什么还要加入一个painterPath呢?

我们再添加几行代码,你就会发现它的用途了。

void Dialog::paintEvent(QPaintEvent *)
{
    QPainterPath path;

    path.addEllipse(100,100,50,50);
    path.lineTo(200,200);

    QPainter painter(this);
    painter.setPen(Qt::green);
    painter.setBrush(Qt::yellow);

    painter.drawPath(path);

    QPainterPath path2;
    path2.addPath(path);    //将path的路径添加到path2中
    path2.translate(100,0);  //将图按照(x,y)坐标偏移

    painter.drawPath(path2);
}

效果如下。

这里我们又新建了一个painterPath对象path2,并将以前的path添加到它上面,然后我们更改了原点坐标为(100,0),这时你发现我们复制了以前的图形。这也就是painterPath类最主要的用途,它能保存你已经绘制好的图形。

3.这里我们应该注意的是绘制完一个图形后,当前的位置在哪里。

例如:

void Dialog::paintEvent(QPaintEvent *)
{
    QPainterPath path;

    path.lineTo(100,100);
    path.lineTo(200,100);

    QPainter painter(this);
    painter.drawPath(path);
}

效果如下。

可以看到默认是从原点(0,0)开始绘图的,当画完第一条直线后,当前点应该在(100,100)处,然后画第二条直线。

再如:

void Dialog::paintEvent(QPaintEvent *)
{
    QPainterPath path;

    path.addRect(50,50,40,40);
    path.lineTo(200,200);

    QPainter painter(this);

    painter.drawPath(path);
}

效果如下。可见画完矩形后,当前点在矩形的左上角顶点,然后从这里开始画直线。

我们可以自己改变当前点的位置。

void Dialog::paintEvent(QPaintEvent *)
{
    QPainterPath path;

    path.addRect(50,50,40,40);
    path.moveTo(100,100);      //设置起始坐标点在这里(x,y)
    path.lineTo(200,200);

    QPainter painter(this);
    painter.drawPath(path);
}

效果如下图。可见moveTo函数可以改变当前点的位置。

这里我们只讲解了绘制路径类最简单的应用,其实这个类很有用,利用它可以设计出很多特效。有兴趣的朋友可以查看一下它的帮助。因为我们这里只是简介,所以不再深入研究。

阅读(1283) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~