Предположу.
Делегат отслеживает изменения в view, устанавливая фильтр событий.
Скорее всего происходит следующее: из обработчика фильтра событий вызывается метод твоего делегата в котором ты пытаешься крутить эту очередь дальше (вызываешь exec()), это и приводит в краху.
Но если вместо show() написать exec() то опять программа завершается аварийно....
а мне то нужно чтоб выполнение остановилось пока диалог не закрыт
Скорее всего придется вынести этот функционал из делегата.