Russian Qt Forum

Qt => Общие вопросы => Тема начата: demaker от Сентябрь 20, 2022, 10:42



Название: Не пробрасывается эвент QGraphicsItemGroup -> QGraphicsTextItem
Отправлено: demaker от Сентябрь 20, 2022, 10:42
Всем доброго дня!
Пытаюсь поимать событие по нажтию на TextItem.
Код
C++ (Qt)
class TextItem: public QGraphicsTextItem
{
...
public:
 enum { TEXT = UserType + 4 };
 int type() const { return TEXT; }
 
protected:
 void mouseDoubleClickEvent(QGraphicsSceneMouseEvent * event);
}
 
void TextItem::mousePressEvent(QGraphicsSceneMouseEvent * event)
{
 setTextInteractionFlags(Qt::TextEditorInteraction);
 setFocus();
 
 QGraphicsTextItem::mousePressEvent(event);
}
 

Экземпляр объекта размещен внутри двух групп: Group1, Group2
Код
C++ (Qt)
class Group1: public QGraphicsItemGroup
{
...
public:
void paint(QPainter *painter, const QStyleOptionGraphicsItem * option, QWidget *widget);
QRectF boundingRect() const;
 
private:
Group2 group2;
}
 
Group1::Group1(QGraphicsItem *parent) : QGraphicsItem(parent)
{
   addToGroup(group2);
}
 
void Group1::paint(QPainter *painter, const QStyleOptionGraphicsItem * option, QWidget *widget)
{
  group2.setPos(5,5);
  ...
}
 

Код
C++ (Qt)
class Group2: public QGraphicsItemGroup
{
...
public:
void paint(QPainter *painter, const QStyleOptionGraphicsItem * option, QWidget *widget);
QRectF boundingRect() const;
 
private:
TextItem *txtiIem;
}
 
Group2::Group2(QGraphicsItem *parent) : QGraphicsItem(parent)
{
 textItem = new TextItem("Hello");
 addToGroup(textItem);
}
 
void Group2::paint(QPainter *painter, const QStyleOptionGraphicsItem * option, QWidget *widget)
{
 textItem->setPos(10,10);
}
 


Код
C++ (Qt)
class Scene : public QGraphicsScene
{
...
protected:
void mousePressEvent(QGraphicsSceneMouseEvent * event);
 
private:
Group1 group1;
}
 
Сцена и обработчик нажатия мыши
Scene::Scene(QObject*parent) : QGraphicsScene(parent)
{
  addItem(&group1);
  group1.setPos(10, 10)
}
 
//Обработка события нажатия мыши на сцене
void Scene::mousePressEvent(QGraphicsSceneMouseEvent * event)
{
 
QGraphicsItem *item = itemAt(event->scenePos());
//если это TextItem
if(item && item->type() == TextItem::TEXT){
  sendEvent(item,event);
}
 
}
 

Почему-то обработка события нажатия клавиши мыши на сцене не доходит до TextItem::mousePressEvent(QGraphicsSceneMouseEvent * event)

Если TextItem размещен непосредственно на сцене
Код:
Scene::Scene(QObject*parent) : QGraphicsScene(parent)
{
   TextItem *textItem = new TextItem("fjgkjfgfd");
   addItem(textItem);
   textItem->setPos(10, 10);
}
то все норм событие орабатывается нормально!

Подскажите что делаю не так???