Имею проект: https://github.com/xintrea/mytetra_dev
Коммит: f3c08a83 (ветка experimental), это просто последний коммит на текущий момент.
У меня есть класс EditorShowTextDispatcher (далее буду называть его просто Dispatcher), который переносится в отдельный поток относительно кода основного приложения. Перенос делается согласно памятке:
Последовательность переноса объекта в отдельный поток для Qt5
Код класса Dispatcher расположен по пути:
/app/src/libraries/wyedit/EditorShowTextDispatcher.cpp
Перенос в отдельный поток происходит в конструкторе данного класса. Перенос осуществляется методом moveToThread(), он вызывается, естественно, ДО настроек коннектов данного класса.
Настройка коннекта для вызова слота класса Dispatcher происходит в классе PeriodicCheckBase:
/app/src/libraries/PeriodicCheckBase.cpp
Настройка коннекта происходит в методе init(). Он вызывается после отработки конструктора класса Dispatcher, то есть после переноса класса Dispatcher в отдельный поток. В коннекте соединяются методы:
c=connect(this,
&PeriodicCheckBase::doUpdateDetachedWindows,
EditorShowTextDispatcher::instance(),
&EditorShowTextDispatcher::closeWindowForNonExistentRecords,
Qt::QueuedConnection);
Испускание сигнала doUpdateDetachedWindows() происходит в методе timerEvent() данного класса PeriodicCheckBase.
Создание коннекта происходит успешно, я проверяю результат работы connect(), там все в порядке. В консоль никаких ворнингов в рантайме не сыплется.
Проблема в том, что слот closeWindowForNonExistentRecords() не вызывается.
Если же поменять тип соединения на Qt::DirectConnection, то слот отрабатывает нормально.
Вопрос: где еще что надо докручивать, чтобы слот можено было вызвать в отдельном потоке?