5

かなりの数の svg 画像を含むグラフィック ビュー (C++ と Qt を使用) に取り組んでいます。それらのクリックをインターセプトしますが、マウスが svg アイテムの透明な部分の上にあるときにイベントを受信したくない (または無視できるようにしたい)。

出来ますか ?
svg ファイルは、そのような使用のために特別に設計されるべきですか?
私が(まだ)聞いたことのない隠されたQtオプションはありますか?

4

3 に答える 3

3

SVG 要素に適用できる CSS プロパティがありpointer-eventsますが、これのデフォルトは次のvisiblePaintedとおりです。

'visibility' プロパティが visible に設定されていて、ポインターが "ペイントされた" 領域上にある場合、指定された要素はポインター イベントのターゲット要素になることができます。ポインターが要素の内部 (つまり、塗りつぶし) 上にあり、'fill' プロパティに none 以外の実際の値がある場合、またはポインターが要素の周囲 (つまり、ストローク) 上にあり、 'stroke' プロパティが none 以外の値に設定されています。

これは、Qt グラフィックス ビューがサポートしていないことを示しています。

于 2011-02-20T00:07:52.230 に答える
2

私の質問に対する難しい方法を見つける以外に選択肢はありませんでしたが、ここで私がしたことは次のとおりです。

  • QGraphicsSvgItem.cpp で mousePressEvent 定義を探しました。何も見つかりませんでした。
  • QGraphicsItem.cpp (QGraphicsSvgItem の祖先) で mousePressEvent 定義を探しました。メソッドは存在しますが、関連するアクションが見つかりませんでした。
  • QGraphicsItem.cpp で mousePressEvent 呼び出しを探しました。Qt グラフィックス シーンのマウス イベントのディスパッチャである QGraphicsItem::sceneEvent() のコードを読んでいることに気づきました。グラフィックアイテムの異なるゾーンを区別するようなものはないようです。

したがって、悲しい答え: Qt はそのような動作を許可しません。

于 2011-02-20T10:58:21.513 に答える