0

こんにちは、私のアプリケーションで QGraphicsView を作成し、その上にシーンを設定しています:

QGraphicsProxyWidget *rotateItemIcon;

HoverFilter *hv = new HoverFilter();  // my hover filter class

connect(hv,SIGNAL(SignalHover(QObject*)),this,SLOT(ObjectHover(QObject*)));
connect(hv,SIGNAL(SignalHoverLeave(QObject*)),this,SLOT(ObjectHoverLeave(QObject*)));
ui->TestIcon->installEventFilter(hv);
...
scene = new QGraphicsScene(this);
scene->setSceneRect(0, 0, 661, 255);

ui->TestIcon->setParent(NULL);


rotateItemIcon = scene->addWidget(ui->TestIcon);  // here i add my control to the scene and receive QGraphicsProxyWidget object
rotateItemIcon->setTransformOriginPoint(ui->TestIcon->width()/2,
                                             ui->TestIcon->height()/2);


 ui->graphicsViewFive->setScene(scene);  //QGraphicsView on my form
 ui->graphicsViewFive->show();

私のHoverFilter.cpp

#include "hoverfilter.h"
#include "QDebug"
HoverFilter::HoverFilter()
{
}
bool HoverFilter::eventFilter( QObject *dist, QEvent *event )
{

 if( event->type() == QEvent::Enter )
 {
      emit SignalHover(dist);
      return true;
 }

 if( event->type() == QEvent::Leave )
 {
      emit SignalHoverLeave(dist);
      return true;
 }


 return false;
}

rotateItemIcon は私の QGraphicsProxyWidget であり、問​​題は奇妙な境界があることです。コントロール TestIcon のホバー時にいくつかのアニメーションを実装する必要があります (イベント フィルターを使用して実行しました)。 、私の TestIcon コントロールだけではありません。コントロールを QGraphicsScene ホバー検出に追加しないと正常に動作するため、これはシーン/プロキシウィジェットの問題であると想定しています。サイズまたは境界を QGraphicsProxyWidget に設定してそれを止める方法はありますか?

4

1 に答える 1

0

あなたの質問を完全に理解しているかどうかはわかりませんが、QGraphicsProxyWidget を介してシーンに配置されたウィジェットがあり、マウスがウィジェットの上にあるかどうかを検出しようとすると、アニメーション化する必要があるようです。

「奇妙な境界」とは、プロキシウィジェットがマウスをウィジェット上にあるものとして受け入れる範囲を意味すると思います。その場合、QGraphicsProxyWidget で setGeometry を呼び出してその位置と寸法を設定するか、QGraphicsProxyWidget から継承して boundingRect 関数を実装してプロキシ ウィジェットの領域を定義することをお勧めします。

于 2013-07-31T15:49:37.750 に答える