1

1つQGraphicsSceneはメインシーンで、いくつかの可動QGraphicsItemがあり、もう1つQGraphicsSceneはメインシーンの上にオーバーレイとしてあります。オーバーレイシーンはユーザーのディスプレイとまったく同じサイズですが、メインシーンははるかに大きいため、自動的に上下にスクロールする必要があります。

メインシーンのアイテムを移動する場合は、そのアイテムをメインシーンから削除してオーバーレイシーンに追加し、ユーザーがオーバーレイシーンのアイテムを移動できるようにし、マウスを離すとすぐに移動できるようにします。メインシーンに戻します。これにより、アイテムがディスプレイの端に近づいたときに、メインシーンをスムーズに自動スクロールできます。

問題は次のとおりです。アイテムがシーンから削除されると、イベントを受信するQMouseUngrabため、オーバーレイシーンでアイテムをもう一度クリックせずにアイテムを移動し続けることはできません。オーバーレイシーンでアングラブイベントを防止したり、偽物QMousePressを生成したりしようとしましたが、いずれも問題を解決しませんでした。

あるシーンでアイテムの移動を開始し、別のシーンで中断することなくアイテムを移動し続ける方法を知っていますか?

言い換えると:

  1. QMousePressメインシーンで起こります
  2. オーバーレイシーンで数QMouseMove秒、最後に発生するはずですQMouseRelease
  3. QMouseReleaseアイテムがメインシーンに戻された直後
4

1 に答える 1

1

あなたがしなければならないことは、ドラッグ アンド ドロップ フレームワークを使用することです。マウスが最初のキャンバスから離れたときにシステム ドラッグを開始できます。その後、QDrag にパックした MIME データをオーバーレイ シーンが受け入れる限り、2 つが相互運用できます。

これは、すべてのプラットフォームで最小公分母の機能を提供するため、ややイライラするシステムです。ただし、1 回の操作で 2 つのウィジェット間の通信が可能になります。

于 2011-10-14T03:50:14.473 に答える