есть шар (QGraphicsEllipseItem), на нём текст (QGraphicTextItem), возможность выделения и перемещения для текста выключил, так как не смог перемещать из-за этого шар при попадании на текст.
для редактирования текста придумал двойной клип мыши на тексте.
основная проблема - заставить срабатывать событие двойного нажатия кнопки мыши без переопределения события mousePressEvent(...) в классе текста
проблема состоит в том, что, когда мышь попадает под текст, то срабатывает mousePressEvent и я не могу захватывать шар и двигать- а мне нужно двигать всегда, если захват прошёл по всему rect шара, для этого я хочу обрабатывать только двойной клик (для редактирования текста)
самый тупой вариант сделать public mouseDoubleClickEvent в классе текста и вызывать его в событии двойного нажатия мыши в классе шара - просто перенаправить объект события, но логичней бы было отправлять двойной клик в этой же функции объекту текста (qApp->sendEvent(...)) - но как пишет QAssist это невозможно - нужен свой mousePressEvent в классе текста
думаю самый логичный вывод из этого всего - свой класс события - двойной клик, ну и его программно создавать потом в функции mouseDoubleClickEvent класса шара и отправлять его классу текста (sendEvent()), но тут другая беда как текст сможет обработать мой класс события
если уж совсе туго, то думаю как-бы заставить при движении текста тоже тягать с собой и шар, ведь текст та просто дочерний элемент (поставлю для текста свойства selectable и movable)
пробую так
C++ (Qt)
void Node::mouseDoubleClickEvent( QGraphicsSceneMouseEvent *event )
{
qDebug()<<"clickNode";
QEvent * my = new QEvent (QEvent::Type::User);
if(graph->scene()->mouseGrabberItem() == m_textItem)
qApp->sendEvent(m_textItem,my);
QGraphicsEllipseItem::mouseDoubleClickEvent(event);
}
//////////////////TextItem
bool sceneEvent(QEvent * event)
{
if(event->type() == QEvent::Type::User )
setPlainText("ssssssssssss");
qDebug()<<event->type();
return QGraphicsTextItem::sceneEvent(event);
}
почему-то событие типа User=1000 не принимается объектом текста, хотя sendEvent() срабатывает у Node
что не так?