多快好省写程序
时间:2010-05-05 来源:haiyong_wu
最近在用qt4写程序的时候,遇到一个问题,就是选择QGraphicsItem时无法显示选中边框。一开始以为是QGraphicsItem的一个属性,找了半天没找到。google之,发现了一篇文章介绍这个问题的解决方法:
http://blog.sina.com.cn/s/blog_5edf6e150100cvn1.html
看了半天,也没想到怎么能比较好的整合到我的程序中。于是暂时放弃,再研究qt4的例子。在diagramscene例子中,也实现了上述功能,经研究发现,是QGraphicsPolygonItem类自带的功能,那么它的实现是不是能简单点呢?
打开qgraphicsitem.cpp,找到QGraphicsPathItem::paint函数,发现在绘制之后,加了
if (option->state & QStyle::State_Selected)
qt_graphicsItem_highlightSelected(this, painter, option); 再找到qt_graphicsItem_highlightSelected函数的实现,发现就是我们想要的,而且该函数相对独立,可以直接复制到我们想要的地方。(从qt提供的注释看,这个函数也是从别的地方复制过来的) 把该函数加入我的程序后,测试好用。代码简单、可靠、可控,实现了我想要的功能。 多快好省的实现共产主义是不可以的,但换个思路,多快好省的实现我们程序功能还是可以的,关键是要多看,多想,多比较。 ps:在qt4编程中,如果要拖动一幅基于view/scene/item的图形,不是通过view的translate来实现,而是通过iew的setDragMode(ScrollHandDrag)函数来实现,这个问题也为上述观点提供了一个很好的注脚。
qt_graphicsItem_highlightSelected(this, painter, option); 再找到qt_graphicsItem_highlightSelected函数的实现,发现就是我们想要的,而且该函数相对独立,可以直接复制到我们想要的地方。(从qt提供的注释看,这个函数也是从别的地方复制过来的) 把该函数加入我的程序后,测试好用。代码简单、可靠、可控,实现了我想要的功能。 多快好省的实现共产主义是不可以的,但换个思路,多快好省的实现我们程序功能还是可以的,关键是要多看,多想,多比较。 ps:在qt4编程中,如果要拖动一幅基于view/scene/item的图形,不是通过view的translate来实现,而是通过iew的setDragMode(ScrollHandDrag)函数来实现,这个问题也为上述观点提供了一个很好的注脚。
相关阅读 更多 +