prasad.ece2
27th February 2014, 04:29
hi, i have to catch keyPressEvent(QKeyEvent* f_event) on item (derived from QGraphicsObject), i am not able to get the event in item, instead it is going into infinite loop in scene itself.
below is the code, thanks in advance.
//scene
void MyScene::keyPressEvent(QKeyEvent* f_event)
{
if(item && item->isSelected())
{
switch (f_event->key())
{
case Qt::Key_Up:
case Qt::Key_Down:
case Qt::Key_Left:
case Qt::Key_Right:
Item->setFocus(); //i have set item is focusable flag in item constructor.
QGraphicsScene::keyPressEvent(f_event); //here its going back to the MyScene::keyPressEvent(QKeyEvent* f_event)again & into infinite loop, Item::keyPressEvent(QKeyEvent* f_event) is not calling at all
break;
default:
QGraphicsScene::keyPressEvent(f_event);
}
}
//item
class Item : public QGraphicsObject
{
Q_OBJECT
/////////////////......///////
protected:
Q_DISABLE_COPY(Item);
void mousePressEvent(QGraphicsSceneMouseEvent * f_event);
void mouseMoveEvent(QGraphicsSceneMouseEvent * f_event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent * f_event);
void keyPressEvent(QKeyEvent* f_event);
void contextMenuEvent(QGraphicsSceneContextMenuEvent * f_event);
};
void Item::keyPressEvent(QKeyEvent* f_event)
{
QGraphicsObject::keyPressEvent(f_event);
//qDebug()<<"keyPressEvent";
f_event->accept();
}
below is the code, thanks in advance.
//scene
void MyScene::keyPressEvent(QKeyEvent* f_event)
{
if(item && item->isSelected())
{
switch (f_event->key())
{
case Qt::Key_Up:
case Qt::Key_Down:
case Qt::Key_Left:
case Qt::Key_Right:
Item->setFocus(); //i have set item is focusable flag in item constructor.
QGraphicsScene::keyPressEvent(f_event); //here its going back to the MyScene::keyPressEvent(QKeyEvent* f_event)again & into infinite loop, Item::keyPressEvent(QKeyEvent* f_event) is not calling at all
break;
default:
QGraphicsScene::keyPressEvent(f_event);
}
}
//item
class Item : public QGraphicsObject
{
Q_OBJECT
/////////////////......///////
protected:
Q_DISABLE_COPY(Item);
void mousePressEvent(QGraphicsSceneMouseEvent * f_event);
void mouseMoveEvent(QGraphicsSceneMouseEvent * f_event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent * f_event);
void keyPressEvent(QKeyEvent* f_event);
void contextMenuEvent(QGraphicsSceneContextMenuEvent * f_event);
};
void Item::keyPressEvent(QKeyEvent* f_event)
{
QGraphicsObject::keyPressEvent(f_event);
//qDebug()<<"keyPressEvent";
f_event->accept();
}