qt 自定义图形项

Qt Creator 快速入门摘录:     

 要实现自定义的图形项,那么首先要创建一个QGraphicsItem的子类,然后重新实现它的两个纯虚公共函数: boundingRect()和paint(),前者用来返回要绘制图形项的矩形区域,后者用来执行实际的绘图操作。其中,boundingRect()函数将图形项的外部边界定义为一个矩形,所有的绘图操作都必须限制在图形项的边界矩形之中。而且,QGraphicsView要使用这个矩形来剔除那些不可见的图形项,还要使用它来确定当绘制交叉项目时哪些区域需要进行重新构建。另外,QGraphicsItem的碰撞检测机制也需要使用到这个边界矩形。如果图形绘制了一个轮廓,那么在边界矩形中包含一半画笔的宽度是很重要的,尽管对于抗锯齿绘图并不需要这些补偿。对于绘图函数paint(),它的原型如下:

      void QGraphicsItem::paint(QPainter *painter, const QStyleOptionGrahpicsItem *option, QWidget *widget = 0);

        这个函数一般会被QGraphicsView调用,用来在本地坐标中绘制图形项中内容。其中painter参数用来进行一般的绘图操作,这与前一章中的绘图操作是一样的;option参数为图形项提供了一个风格选项;widget参数是可选的,如果提供了该参数,那么它会指向那个要在其上进行绘图的部件,否则默认为0,表明使用缓冲绘图,painter的画笔的宽度默认为0,它的画笔被初始化为绘图设备调色板的QPalette::Text画刷,而painter的画刷被初始化为QPalette::Window。

       一定要保证所有的绘图都在boundingRect()的边界之中。特别是当QPainter使用了指定的QPen来渲染图形的边界轮廓时,就必须在boundingRect()里绘制一个单位的边界线。这也是在boundingRect()中要包含关个画笔宽度的原因。QGraphicsItem不支持使用宽度非零的装饰笔。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值