[PySide] GraphicsViewのテスト その3 オブジェクト削除+α

まだいくつか分からないことがあったので、GraphicsViewのテスト続き。
削除と、ViewとSceneの関係について。

とりあえず長いけど全コード貼り付け

delete_item

クリックで再生

だいたいは前回と同じですが、少し手直し+右クリックでオブジェクトを削除するのを追加してみました。
基本的には、削除するときは scenesオブジェクトから removeItem(itemObj) してあげればOKです。
消したアイテムより後ろのアイテムをずらす処理だけ追加しました。
ここで1つあれだったのが、DoubleClickEvent はマウスの右・左関係なく拾ってしまうので
いままでのままだと削除すると追加されてしまう仕様になってた所。
なので、
if event.button() == QtCore.Qt.LeftButton:
を使用して、左ボタンの時のみ追加処理を行うように修正しました。
右クリックの場合は QtCore.Qt.RightButton にすればOKです。

マウス下にあるアイテムは、 view.itemAt(pos) で取得することができます。
何もないところをクリックすると、意図したオブジェクトじゃない可能性もあるので
取得時に型を確認しておきます。

View_Scene_Item

そんな感じで、削除周りはわりとすぐ出来たのですが
タイルテクスチャツールを作ってる時にアイテムがあらぬ方向にふっとんだり
0位置がおかしくなったりして???になってしまってしばらく調べていたら
ViewとSceneとItemの関係を勘違いしていたのが原因(というかScenesの存在を忘れていた)

いままでViewの背景をしろにしていたのでわかりにくかったので、View部分は灰色にしました。

イメージでいうと、Photoshop→View Scenes→キャンパス Item→シェイプ のような感じになっています。
0番目アイテムの表示位置がおかしくなるのは、Viewの表示位置が吹っ飛んでしまったせいって事ですね。

ここまで把握して…自分がやりたい事をやる場合、Scenesを使う必要あんまりないことに気がつきました。
これ、Sceneなしで直接描画とか出来るのか?

やっぱり既存のWidgetに頼らないUIを作ろうとすると色々と面倒ですなぁ(´・ω・`)
しばらくPySideが続きそうズサーc⌒っ゚Д゚)っ

追記。
Sceneの位置が吹っ飛んでしまうのをなんとかならないかなぁと調べてみたら

これでスクロールバーを消せるので、コレを入れておけばぶっとんだりはしなくなる様子。
GraphicsViewは QAbstractScrollArea を継承しているので、そっちのオプション確認ということでした。>>参考

とりあえず固定さえしてしまえばやりたい事はできそうかな?

コメントを残す

メールアドレスが公開されることはありません。


*