关键词不能为空

当前您在: 主页 > 英语 >

qtgraphicsview框架中实现多个item之间的层次调整功能

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-13 19:42
tags:

-

2021年2月13日发(作者:bomb)


Qt GraphicsView


框架中实现多个


item


之间的层次调整功能








目的:要实现


GraphicsView


中 多个


item


之间的层次调


整功能,即 :选中的


item


可以实现


< p>
移动至顶层、移动至底


层、


上移一层、

< p>
下移一层



等功能。










之前盲目地认为


Qt API


会提供“获取与之相邻的


sibling item”类 似这样的接口,


但是查询无果。



。< /p>










setZValue()


设置


item


的栈顺序,


通过


zValue()


来测试,具有低


z-values


< p>
item


比具有高


z-value



item


先绘制。



即:



z-values


item


位于下层,



z-values



item

< br>位于上层)










可以调用


setZvalue()< /p>


来设置一个


item


< br>Z


值。默认的


Z


值是

< p>
0


,具有同样的


Z


值的< /p>


item


会按照插入的顺序来入栈


(st ack order)



也就是说,


G raphicsView


会优先根据


item

< br>的


Z


值决定


item

< p>
的层次,



有当


Z


值相同的情况下才会去理会


stack order

< br>;


这样,


我就


基本上决定放弃采 用


setZvalue()


方法来实现我的功能了,

< p>


为,由于所有


item



Z


值默认都是


0

,调用


setZvalue()



法基本上只能实现置于顶层或底层的功能,即使想办法获取


到了与其相邻的上一个或下一 个


item



也是需要去设置相关


item



Z


值, 这样一来,维护


tiem


的层次的工作完全由自


己来完成了,而不再是


GraphicsSene


自己 去根据


stack



order


去管理维护了,自己的工作量会很大,而且,效率会


比较低下。



。于是,果断放弃此途径。










还是想 偷个


赖,



item

< br>的维护工作依然交给


Scene



所以通过调整


item



stack order


来实现上述功能。









API


有一个


stackBefore(QGraphicsItem *sibling)


方法 ,可以调用该访


求来重新排序


item


的列表,


就可以直接调整


item


的顺 序了。


例如:


itemA->stackBefore( itemB)


,是将


itemA



order


重置到


itemB


之前,


这样,


先绘制


ite mA



后绘制


itemB



itemB


处于上方。但是,这需要我解决“获取


sibling item”的工作,


还好问题不大,


QGraphicsScene


类方法


coll idingItems(QGraphicsItem *item)


会返回一个在这个


Scene


中与传入的


item


有碰撞的所有其它


item


的一个列表


QList<QGraphicsItem



*>


,注意一下,这个列表是不包含


item< /p>


本身的,而且以


是自上层向下层的顺序来返回的。










于是,自己写了


一个算法,


以获取当前


item


在所有冲撞


items

< p>
中的位置,



下所示:



[cpp:nogutter] view



plaincopyint


QDrawGraphicsSc ene::getItemIndex(QGraphicsItem


*item)




{








//list1


是与


item


碰撞的其它


item


列表









QList<QGraphicsItem *> list1 =


collidingItems(item);









//


没有碰撞









if (() == 0)












return 0;









//


只有一个与之碰撞









if (() == 1)






















//



2










{












QRectF

< br>rect1(item->mapToScene(item->boundingRect ()).bou


ndingRect());












QRectF


rect2(()- >mapToScene(()->bounding


Rect()).b oundingRect());












QRectF rectMix = ected(rect2);












QPointF


point(item->mapFromScene(rectMix).boundingR ect().ce


nter());












QRectF rect(point.x()-0.5, point.y()-0.5, 1, 1);












if (item->isObscured(rect))
















return 1;

































//i tem


为下层(共


2


层)




-


-


-


-


-


-


-


-



本文更新与2021-02-13 19:42,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/652343.html

qtgraphicsview框架中实现多个item之间的层次调整功能的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文
qtgraphicsview框架中实现多个item之间的层次调整功能随机文章