- QGraphicsItemは、境界の四角形がいつ変更されたかをどのように認識しますか?
私はあなたが知っていると思います。複数の子アイテムを集約するQGraphicsItemGroupがあり、一度に1つの子のみを表示するとします。グループアイテムの境界長方形は、現在選択されているアイテムの境界長方形と同じである必要があります。
QRectF MyItemGroup::boundingRect() const
{
QRectF rect;
if (currentItem_) {
rect = currentItem_->boundingRect();
}
return rect;
}
表示する必要のある子の1つを変更する方法があるとします。
void MyItemGroup::setCurrentItem(MyItem * item)
{
if (list_of_items_.contains(item)) {
prepareGeometryChange();
currentItem_ = item;
}
}
prepareGeometryChangeをコメントアウトすると、ビューはMyItemGroupの境界rectを再度要求せず、アイテムの更新(別の場所でトリガーされる)には間違ったrectが含まれます。
- update()をいつ呼び出すかをどのように知るのですか?
QGraphicsItemのソースによると、prepareGeometry
メソッド内でupdateが呼び出されるのは次の2つの場合のみです。
- 誰かが
changed
信号に接続されている場合
- シーンにビューがない場合
詳細はこちら
- prepareGeometryChange()を呼び出してから境界矩形を変更した後、自分でupdate()を呼び出すことになったことはありますか?
答えはノーだと思います。の呼び出しとは別に、シーン上のアイテム領域をダーティとしてマークし、領域自体の再描画を引き起こしますupdate
。prepareGeometryChange
私の経験では、これは100%のケースで十分だったので、update()を呼び出す必要はありませんでした。