#qt #selectionchanged #qgraphicsscene
#qt #измененный выбор #qgraphicsscene
Вопрос:
Я создаю приложение на qt, и я столкнулся с проблемой.
У меня есть сцена qgraphics. Я создаю сцену, и я ввел некоторые действия, которые будут выполняться, когда пользователь нажимает на элемент сцены.
Я могу обнаружить selectionChanged()
сигналы, но:
-
Сигнал выдается дважды (один раз для выбранного элемента и один раз для ранее выбранного элемента (отмена выбора), поэтому требуемые действия выполняются дважды для обоих элементов).
-
При нажатии на элемент он остается выбранным, и я не могу щелкнуть его снова… (я пытался настроить
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)
запускается новый сигнал, и, похоже, выбран тот же элемент … я не знаю … что-то странное происходит в моем коде … : (в любом случае, спасибо за ответ…