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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: своё событие QEvent QGraphicsItem  (Прочитано 2735 раз)
daimon
Гость
« : Декабрь 04, 2011, 21:19 »

есть шар (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
что не так?
« Последнее редактирование: Декабрь 04, 2011, 23:57 от daimon » Записан
artiom_kh
Гость
« Ответ #1 : Март 02, 2012, 12:28 »

в классе своего текстового айтема (унаследованного от QGraphicTextItem) сделай так: http://www.prog.org.ru/index.php?topic=20748.msg145092#msg145092, даблклик пусть обрабатывает шарик (QGraphicsEllipseItem) и запускает редактирование текстового айтема
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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