关于QtGraphics编程的几点经验总结 qt graphics view
QtGraphics模块用于显示二维的图形图像,所以三维的事情就不要找它了,应该去找Qt的OpenGL模块。主要由三部分组成,分别是View,Scene, Item。
QGraphicsView负责窗口显示,它继承自QWidget,因此是一个标准的Qt窗口类,Qt窗口类一般的操作QGraphicsView都支持。QGraphicsScene是一个视图,它不能够单独存在,必须关联到至少一个QGraphicsView。这两者的关系就和MVO架构中的文档和视图的关系类似,View是视图,负责显示;Scene是文档,负责存储数据。所以从这个角度出发,我们可以这样认为,一个Scene可以关联到多个View,就好比一份数据可以有多个视图去查看它一样。
Item则是具体要显示的东西。最基本的Qt类就是QGraphicsItem,一般如果要显示自定义的形状通常的做法是继承自QGraphicsItem,然后去实现它的两个纯虚函数boundingRect和paint,它们的形式化申明如下:virtual QRectF boundingRect () const = 0virtual void paint ( QPainter * painter, constQStyleOptionGraphicsItem * option, QWidget * widget = 0 ) = 0boundingRect就是返回该Item的包围盒,用于Graphics内部的碰撞检测以及选取等计算。paint则是用于Item的重绘。
除最基本的QGraphicsItem之外,Qt还定义了若干基本形状的Item,例如QGraphicsEllipseItem、QGraphicsLineItem、QGraphicsRectItem等等,具体可查Qt文档。如果想要绘制的Item形状和这些基本类型接近,不妨直接继承自这些类,然后在paint函数中稍加修改。
Qt之所以提供Graphics模块是为了对二维图形编程方面提供基本的常用的平台功能支持,例如拖动、选择、旋转、动画、缩放、碰撞检测等等。这些功能,简言之,如果我们要用,是不必像在MFC上那样大费周折的,QtGraphics提供了很好的操作接口。例如,要使得Item能够被选择,只需要设置它的Flag:setFlag (QGraphicsItem::ItemIsMovable);即可。移动、是否能获取焦点等都类似。
Qt默认情况下,对于选中的Item,如果你是继承自特殊形状的子类,则会在Item的包围框上显示虚框。若要去掉该虚框,则在paint函数中加入如下代码:QStyleOptionGraphicsItem op(*option );op. state = QStyle:: State_None;然后调用父类的paint函数时,将op作为option传入即可。如果要使得选中的Item呈现不同的状态(颜色、大小等)也是在paint函数中加以修改。
QGraphicsView和QGraphicsScene以及QGraphicsItem都能够接受鼠标、键盘事件,那他们的关系又是如何呢?首先从消息流来看,先是View,然后是Scene,最后是Item。任何阶段若节流事件,则下一层就不会再接受到事件了。对于QGraphicsView和QGraphicsScene,我们应该在哪里处理鼠标或者键盘事件呢?其实两者都是可以的,具体看需求。联系之前所说的文档视图关系可以知道,若应用程序中只有一个View和一个Scene,那么其实在哪里实现都无所谓;当时如果一个Scene对应了多个View,则就有区别了。如果具体到一个视图的操作,应该在View类中实现;如果是Scene需要统一进行处理的,那么就应该在Scene中实现。
Scene更新的时候,尽可能将更新范围限制在最小内,毕竟update全局的话需要消耗较多的资源,尤其是显示内容比较大的时候,会不流畅。
获取鼠标下面的item方法是itemAt。若在View中调用此函数,注意它的参数坐标是View中的坐标,即不需要再做任何的转化。
GraphicsScene中可以内嵌入标准的QWidget,但是其行为和正常的widget略有不同。我发现的一点是:只有真正在Scene中显示的时候,其内部控件才是真正存在的,否则ui内的指针均无效。估计是为了节约资源考虑的吧。这点切记!
QGraphicsItemAnimation可以实现一些简单的动画操作,亲测效果还是不错的,较为平滑。
暂记这些,有问题可以讨论。
更多阅读
关于对中央党校谢春涛教授所讲课的几点意见 党校老师讲课主持词
关于对中央党校谢春涛教授所讲课的几点意见(2008-10-23 21:45:21)标签:杂谈关于对中央党校谢春涛教授所讲“毛泽东对中国社会主义建设道路的探索”一课的几点意见
关于加强人大机关作风建设的几点思考-仙居新闻网 中国仙居新闻网
关于加强人大机关作风建设的几点思考Http://www.rjxj.com.cn 2009-11-18 16:37:19 仙居新闻网 字体:大 中 小作风建设是一个永恒的主题。加强人大机关作风建设,是提高人大干部履职能力,发挥人大职能作用,推动仙居科学发展的具体体现。
关于“HR职场黑名单”的几点思考---回复留言的朋友 换位思考的职场小故事
关于“HR职场黑名单”的几点思考今天是7:40的早班飞机,从武汉到深圳,参加一个非常专业的讲师培训,结果一到地,开手机,就发现,为什么好多人找我,于是马上找到一个咖啡厅上线,一上QQ,发现各个HR群都在议论金报上的“HR黑名单”,我的微博上,居然也
关于如何拍好片子的几点感受 -宾得Kx论坛-ZOL中关村在线 zol中关村在线笔记本
关于如何拍好片子的几点感受节日素材比较多,每天急于抢时间拍片,现在终于可以抽点时间总结一下自己了。希望我的感受,对大家在拍片上能有所帮助,当然,这是我自己的感受,每个人的偏好不同,看问题的出发点也不一样,如有逆耳之处请海涵,因为是见
关于入编《最美的风景》图书的几点说明,请作者务必仔细阅读(散文 安徽风景的散文
关于入编《最美的风景》图书的几点说明,请作者务必仔细阅读(散文目录)明杰主编,山东画报出版社正式出版,全国新华书店发行《最美的风景——中国作家、诗人眼中的旅游名胜景点》散文候选目录敬告:图书选题已经正式申报山东画报出版社,书