【发布时间】:2016-07-13 01:40:15
【问题描述】:
所以我知道这里有很多类似的问题,但没有一个真正达到我感兴趣的具体点。
我想实现 QGraphicsItems 的自定义选择行为(例如,在选择时更改其颜色)。显然这是由项目本身处理的,因此需要创建一个自己的类来扩展QGraphicsItem。在那里,我真的错过了一些东西,比如一个可以覆盖的onSelectionToggled 方法(插槽)。但我最终发现必须重写mousePressEvent 方法(毕竟“选择”只是左键抽象概念的更具体术语)。
所以如果在这个方法中我调用:
setPen( QPen( QColor( "orange" ) ) );
update();
当我单击单个项目时,颜色实际上会发生变化。
但当通过场景的橡皮筋进行选择时,则不然。
由于没有onSelectionToggled,我想象场景会“模拟”相交项目的相应鼠标事件。
既然情况并非如此,我的问题是:“我如何通过橡皮筋对这样的选择做出反应?”理想情况下以“统一”的方式(通过鼠标单击单独选择没有额外的代码)。
另外,我想知道如何防止在选择时绘制虚线边界矩形。我不想要它,并希望在子类化 QGraphicsItem 时自动摆脱它。
【问题讨论】:
-
不是为了大问题,而是为了虚线矩形,恐怕你得重新实现
QStyle::drawPrimitive... -
@AlexisP。严重地?因为 QStyle 是一个具有许多派生类的抽象类,它们都可以在 QGraphicsScene::setStyle 中使用。对我来说,这看起来像是我必须对所有这些类进行子类化,覆盖 drawPrimitive 方法。或者我只选择 QStyle 的一个子类,但随后我失去了场景适应例如风格的能力。 KDE、Mac OS 或 Windows(据我所知,QStyle 实际上适用于这些)。
标签: qt selection qgraphicsitem qgraphicsscene