2

プラグインを使用して GUI をセットアップしようとしています。現在のフェーズでは、ユーザーがクリックしてポイントの場所を指定する必要があります。

私がセットアップしたプラグイン アーキテクチャでは、プラグインが使用したい QGraphicsItem を返す必要があります。メイン プログラム (将来のプラグイン作成者はアクセスできなくなります) で、クリックをガイドする背景画像を設定しました。プラグインは、itemChange() を使用し、設定されているシーンに eventFilter() をインストールして、scene() に密かにアクセスできます。これにより、プラグインがシーン クリックにアクセスし、必要な情報を処理できるようになります。ただし、背景画像は itemAt() 呼び出しによって返されています。

今後のすべてのプラグインで、このバックグラウンド Pixmap が itemAt() で返されないようにしたいと考えています。これは可能ですか?


試した:

 setEnabled(false); //No success
4

2 に答える 2

1

これはあなたの質問に直接答えるものではありませんが、あなたの問題を解決するはずです.pixmapを再実装QGraphicsScene::drawBackground()して描画することをお勧めします. そのためのメソッドです。

同様のアプローチは、ピックスマップをリソース ファイルに配置し、スタイル シートを使用して QGraphicsView またはそのビューポート ウィジェットの背景として設定することです (これらの効果はわずかに異なると思います)。

于 2012-11-06T16:53:44.920 に答える
0

項目を itemAt() (またはその他の衝突検出メソッド) から見えないようにするには、boundingRect() メソッドが幅と高さがゼロの QRectF を返すようにします。

ただし、これには、QGraphicsView の部分的なビューポート更新モードのいずれかが誤動作するという副作用があります。これは、QGV がアイテム自体がどこに描画されるかがわからないためです。これは、再描画のたびに QGV に完全な更新を行わせることで解決できます (setViewportUpdateMode(QGraphicsView::FullViewportUpdate))。シーンによっては、これは許容できる妥協点かもしれません。OpenGL グラフィックス バックエンドを使用している場合、ビューポートの更新は常に完全な更新になります。

于 2012-11-06T02:57:52.130 に答える