0

非常にシンプルなQtGUIアプリケーション:

  • シーンには、QGraphicsItemとして実装された複数の円があります
  • boundingRectは、この円の周りの正方形を返します。
  • メソッド「shape」はオーバーライドされません。

私が追加したpaint()メソッドで問題が発生します:

if (isSelected()) {
    painter->drawRect(re);
}

選択はうまく描画されますが、選択を解除しても再描画は発生しません。ログレベルでは、アイテムが実際に選択フラグを失ったことがわかります。itemChangeからupdate()を呼び出すことも役に立ちません。ご提案ありがとうございます。

4

2 に答える 2

0

10日後、私はこの問題に戻り、QGraphicsItemが setCacheMode(DeviceCoordinateCache); OMGで構築されていることを発見しました。ばかげた間違い、この行が削除されたとき(デフォルトではQGraphicsItem :: NoCacheが使用されます)、選択はうまく再描画されます。

于 2009-10-29T15:43:55.727 に答える
0

setViewportUpdateMode(QGraphicsView :: FullViewportUpdate);を使用して、デフォルトのQGraphicsView::MinimalViewportUpdateをFullViewportUpdateに変更することもできます。

または、scene()-> update();を呼び出すこともできます。アイテムから再ペイントをスケジュールします。

少なくとも、アイテムのQGraphicsItem :: ItemHasNoContentsフラグを変更し続けると、そのうちの1つが必要になりました。

于 2010-06-10T11:47:17.153 に答える