LINUX.ORG.RU

История изменений

Исправление 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

как советовал 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(), или ошибка в чем-то другом?