История изменений
Исправление Xintrea, (текущая версия) :
Да, дело было в основном цикле. Добавил в периодический код треда вызов qApp()->processEvents(); и все заработало. Оказывается, такой вызов в треде вызывает обработчик цикла событий в самом треде, а не цикла событий приложения.
После того как заработало, я попробовал сделать вызов слота с типом параметра:
const QString &fileName
* * *
После чего я попробовал сделать новое соединение новых сигнала/слота, в котором используется похожий тип параметра:
const QVector<QPointF> &pointsBuffer
Компилится без ошибок, но в момент вызова слота в рантайме появляется опять такая же ошибка как в топике:
QObject::connect: Cannot queue arguments of type 'QVector<QPointF>'
(Make sure 'QVector<QPointF>' is registered using qRegisterMetaType().)
И вот я не могу понять, почему для QString константная ссылка работает, а для QVector<QPointF> нет. Ошибок компиляции ведь нет, коннект сделан в «новом» стиле, неужели действительно надо регистрировать тип через qRegisterMetaType(), или ошибка в чем-то другом?
Исправление Xintrea, :
Да, дело было в основном цикле. Добавил в периодический код треда вызов qApp()->processEvents(); и все заработало. Оказывается, такой вызов в треде вызывает обработчик цикла событий в самом треде, а не цикла событий приложения.
После того как заработало, я попробовал сделать вызов слота с типом параметра:
const QString &fileName
как советовал Silerus. И такой вариант тоже заработал.
После чего я попробовал сделать новое соединение новых сигнала/слота, в котором используется похожий тип параметра:
const QVector<QPointF> &pointsBuffer
Компилится без ошибок, но в момент вызова слота в рантайме появляется опять такая же ошибка как в топике:
QObject::connect: Cannot queue arguments of type 'QVector<QPointF>'
(Make sure 'QVector<QPointF>' is registered using qRegisterMetaType().)
И вот я не могу понять, почему для QString константная ссылка работает, а для QVector<QPointF> нет. Ошибок компиляции ведь нет, коннект сделан в «новом» стиле, неужели действительно надо регистрировать тип через qRegisterMetaType(), или ошибка в чем-то другом?
Исходная версия Xintrea, :
Да, дело было в основном цикле. Добавил в периодический код треда вызов qApp()->processEvents(); и все заработало. Оказывается, такой вызов в треде вызывает обработчик цикла событий в самом треде, а не цикла событий приложения.
После того как заработало, я попробовал сделать вызов слота с типом параметра:
const QString &fileName
как советовал [user]Silerus[/user]. И такой вариант тоже заработал.
После чего я попробовал сделать новое соединение новых сигнала/слота, в котором используется похожий тип параметра:
const QVector<QPointF> &pointsBuffer
Компилится без ошибок, но в момент вызова слота в рантайме появляется опять такая же ошибка как в топике:
QObject::connect: Cannot queue arguments of type 'QVector<QPointF>'
(Make sure 'QVector<QPointF>' is registered using qRegisterMetaType().)
И вот я не могу понять, почему для QString константная ссылка работает, а для QVector<QPointF> нет. Ошибок компиляции ведь нет, коннект сделан в «новом» стиле, неужели действительно надо регистрировать тип через qRegisterMetaType(), или ошибка в чем-то другом?