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

#qt #selectionchanged #qgraphicsscene

#qt #измененный выбор #qgraphicsscene

Вопрос:

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

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

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

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

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

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

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

Ответ №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 на этом компьютере, я думаю, это должно сработать.

Комментарии:

1. я пробовал это, но это переходит в бесконечный цикл … кажется, что item->setSelected(false) запускается новый сигнал, и, похоже, выбран тот же элемент … я не знаю … что-то странное происходит в моем коде … : (в любом случае, спасибо за ответ…