Метод QTimer timeout() больше не срабатывает после реструктуризации кода

Недавно я переформатировал часть своего кода, чтобы сделать его более читабельным. У меня был код в моем классе MainWindow для обработки сенсорных событий. Среди этих функций была функция pinchZoom, которая работала до моих изменений. Вместо этого я переместил код в одноэлементный класс, который является QObject.

Когда pinchZoom обнаружен, соответствующий виджет (найденный с помощью QApplication::widgetAt()) вызывает свой метод pinchZoom(), который останавливает, а затем перезапускает однократный QTimer. Метод timeout() QTimer связан со слотом, который выполняет фактическое масштабирование и обновление представления. Это сделано для того, чтобы я мог добавить задержку между фактическим жестом масштабирования и обновлением представления.

До перемещения моего кода этот сигнал timeout() работал нормально, и срабатывал метод масштабирования. Однако, несмотря на то, что соединения сигнал/слот не затрагиваются, слот масштабирования, запущенный методом timeout(), больше не вызывается. Фактическая связь между сигналом timeout() и слотом выполняется в конструкторе виджета, где находится таймер.

Я проверил, и соединение сигнал/слот возвращает истину, так что соединение ЕСТЬ.

Есть ли какая-то причина, почему это произойдет? Связано ли это с тем, что запуск QTimer теперь происходит внутри класса singleton вместо класса MainWindow?


person Darin Beaudreau    schedule 01.08.2019    source источник


Ответы (1)


Кажется, проблема заключалась в том, что мой одноэлементный класс находится в отдельном потоке, и QTimer не может быть запущен из отдельного потока. Я только что установил слот в исходном классе MainWindow, чтобы принимать сигнал от класса singleton, а затем вызывать метод увеличения масштаба. Теперь работает нормально.

person Darin Beaudreau    schedule 01.08.2019