вызвать mouseMoveEvent нескольких QGraphicsItem одновременно - PullRequest
1 голос
/ 17 ноября 2011

Когда я выбираю несколько QGraphicsItem (с помощью клавиши Ctrl), я могу перемещать их вместе, но mouseMoveEvent запускается только для элемента, который фактически получает событие. Есть ли способ заставить каждый выбранный предмет получить событие? Я не могу найти его в документе Qt.

Могу ли я сгруппировать выбранные элементы вместе и обработать их в mouseMoveEvent QGraphicsView?

Большое спасибо за любую помощь:)

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Нет, по умолчанию нет способа сделать то, что вы хотите, насколько я знаю.Вы можете сделать следующее:

  • Подкласс QGraphicsScene и реализовать mouseMoveEvent
  • В событии перемещения мыши проверьте, есть ли элемент в позиции события, используяitemAt функция
  • Если есть элемент, и он выбран (isSelected), получить все выбранные элементы сцены.
  • Для всех выбранных элементов вызовите ту же функцию, которую вы вызываете,

Пример кода следующий:

void mouseMoveEvent(QGraphicsSceneMouseEvent * mouseEvent) 
{
    QPointF mousePosition = mouseEvent->scenePos();
    QGraphicsItem* pItem = itemAt(mousePosition.x(), mousePosition.y());
    if (pItem == NULL)
    {
        QGraphicsScene::mouseMoveEvent(mouseEvent);
        return;
    }

    if (pItem->isSelected() == false)  
    {
        QGraphicsScene::mouseMoveEvent(mouseEvent);
        return;
    }

    // Get all selected items
    QList<QGraphicsItem *> items = selectedItems();

    for (unsinged i=0; i<items.count(); i++)
        // Do what you want to do when a mouse move over a selected item.
        items[i]->doSomething(); 

    QGraphicsScene::mouseMoveEvent(mouseEvent);  
}
1 голос
/ 17 ноября 2011

Я читаю между строк вашего вопроса немного, но звучит так, что вам лучше справиться с реализацией QGraphicsItem::itemChange в ваших QGraphicsItem классе (ах).Он будет вызываться всякий раз, когда позиция изменяется - с помощью мыши, клавиатуры, программ и т. Д. Вы можете даже отменить изменение, если хотите.

...