Russian Qt Forum
Март 29, 2024, 04:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не пробрасывается эвент QGraphicsItemGroup -> QGraphicsTextItem  (Прочитано 1311 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Сентябрь 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);
}
то все норм событие орабатывается нормально!

Подскажите что делаю не так???
« Последнее редактирование: Сентябрь 20, 2022, 12:28 от demaker » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.152 секунд. Запросов: 22.