2013-02-15 3 views
0

В моем приложении у меня есть следующие ситуации:Qt - зарегистрировать несколько сигналов, которые, когда они все излучаемые производят гигантский сигнал, подключенных к одному слоту

  • объект излучает сигнал removeCharacter
  • removeCharacter имеет часть а и в, а после того, как часть а делается это пожары сигнал removePath
  • слот onRemovePath соединен с сигналом removePath и будет удалить путь для символа, а затем огонь сигнал pathRemoved
  • слот finishRemovingCharacter соединен с сигналом pathRemoved и закончить остальную часть процесса удаления символов
  • Я не хочу, чтобы всегда выполнять эту finishRemovingCharacter логики, когда огнь removePath сигнала

Есть некоторые общий способ достичь вышеуказанного, желательно, что Qt может уже иметь доступный?

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

+0

Я не понимаю: пожалуйста, не могли бы вы сказать, что вас не радует или что вы хотите обобщить? –

+1

Я не понимаю вопроса, возможно, QSignalMapper - это то, что вам может понадобиться? Или, может быть, связь с Qt :: BlockingQueuedConnection? – paulm

ответ

1

Как я вижу, есть всего два способа справиться с ситуацией.

Вариант 1:
Используйте два сигнала для события pathRemoved. Например, finishRemovingCharacter подключен к pathRemoved, но НЕ pathRemovedSpecial.

Вариант 2:
Добавить правильные аргументы pathRemoved сигнала, а затем в чеке finishRemovingCharacter слота, если он должен продолжать или просто игнорировать это событие, в этом случае вы будете просто return;.

+1

Вариант 2 звучит неплохо. Я пробовал пропустить финишную метку finishRemovingCharacter в качестве аргумента в сигнальном пути. В надежде, что я могу напрямую вызвать любой аргумент слота, который я передал onRemovePath, но я не мог правильно его компилировать. – mpellegr