QGraphicsProxyWidget上奇怪的控制边界检测

时间:2013-07-31 15:17:12

标签: c++ qt animation graphics qgraphicsscene

你好我的应用程序我正在制作一个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悬停检测工作正常,所以我假设这是一个scene / proxywidget问题。有没有办法可以设置QGraphicsProxyWidget的大小或边界来阻止它?

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解你的问题,但听起来你通过QGraphicsProxyWidget将一个小部件放在一个场景中,当你试图检测你的鼠标是否在你想让它动画的小部件上时。

通过'奇怪的边界',我假设你的意思是代理小部件接受鼠标作为在小部件上的范围。如果是这样,我建议在QGraphicsProxyWidget上调用setGeometry来设置它的位置和维度,或者从QGraphicsProxyWidget继承并实现boundingRect函数来定义代理小部件的区域。