Qt QGraphicsScene как разделить сигналы выбора и отмены выбора?

Я создаю приложение в qt, и у меня возникла проблема.

У меня есть сцена qgraphics. Я создаю сцену и выполняю некоторые действия, когда пользователь нажимает на элемент сцены.

Я могу обнаружить selectionChanged() сигналы, но:

  1. Сигнал излучается дважды (один раз для выбранного элемента и один раз для ранее выбранного элемента (отмена выбора), поэтому требуемые действия выполняются дважды для обоих элементов).

  2. Когда элемент щелкается, он остается выбранным, и я не могу щелкнуть его снова ... (я пробовал установить item->setSelected(false), но он попадает в бесконечный цикл выбора / отмены выбора ...).

Кто-нибудь знает, как это исправить?

Я пытаюсь добиться, чтобы при отмене выбора не выполнялось никаких действий, и чтобы иметь возможность повторно щелкнуть выбранный элемент и повторно выполнить действие.


person gio    schedule 24.05.2011    source источник


Ответы (1)


Определите слот yourSlot() и подключите его к сигналу selectionChanged(). В этом слоте вы проверяете, выбран ли элемент, отвечающий за излучение сигнала.

void yourSlot() {
   QGraphicsItem  *item = qobject_cast<QGraphicsItem  *>(sender());

   if (item) {
      if ( item->isSelected() ) { //this item is selected
         doSomethin();

         //*deselect* the item so that it can be selected again
         item->setSelected(false);
      } 
      else { //the signal was fired because the item was deselected
        //ignore()
      }
   }
}

Я не могу попробовать это прямо сейчас, потому что у меня на этом компьютере не установлен Qt, и я думаю, что он должен работать.

person bruno    schedule 24.05.2011
comment
Я пробовал это, но он заходит в бесконечный цикл ... кажется, что item->setSelected(false) запускает новый сигнал, и кажется, что тот же элемент выбран ... я не знаю ... в моем коде происходит что-то странное. .. :( все равно спасибо за ответ ... - person ; 25.05.2011