在 scene 中添加 qgraphicsitem 后,当选中该 item 时,会看到边缘区域出现虚线,感觉不太美观。下面,我们来讲解如何去掉虚线并自定义选中样式。
<a href="#%e7%ae%80%e8%bf%b0">简述</a>
<a href="#%e9%bb%98%e8%ae%a4%e6%a0%b7%e5%bc%8f">默认样式</a>
<a href="#%e8%99%9a%e7%ba%bf%e7%9a%84%e7%94%b1%e6%9d%a5">虚线的由来</a>
<a href="#%e5%8e%bb%e6%8e%89%e8%99%9a%e7%ba%bf">去掉虚线</a>
<a href="#%e8%87%aa%e5%ae%9a%e4%b9%89%e9%80%89%e4%b8%ad%e6%a0%b7%e5%bc%8f">自定义选中样式</a>
以椭圆为例,其它如:矩形、多边形等 item 类似。
要出现选中效果,需要为 item 设置选中标识 qgraphicsitem::itemisselectable。设置之后,选中 item,默认样式如下:
边框区域出现虚线部分,下面我们来逐步分析。
要知道虚线是怎么来的,最好的办法就是看源码。还是那句话 - 源码面前,了无秘密!
前半部分正是椭圆的样式,虚线部分主要是后半部分 qt_graphicsitem_highlightselected() 所实现的内容,进去看看吧!
来看最主要的部分:先使用颜色为 bgcolor 的画笔绘制实线,再使用窗体文本的颜色绘制虚线,而绘制的区域则是 boundingrect() 边界区域的各个方向分别向外扩展 pad 像素。
既然知道了原理,那么去掉虚线就变得很容易。
去掉虚线后,选中时没有样式也不行,那就随便添加一个自定义样式吧,根据源码修改。
这时,我们实现了一个选中时边框区域为黄色的虚线框(其他样式,同理)。很简单吧,所以呢,没事多瞅瞅源码吧o(∩_∩)o~!