Задача состоит в том, что есть два класса. В экземпляре одного из принимаются на вход данные (например чтение из файла) и после обработки передается в экземпляр другого класса. Первый класс, который формирует и передает данные наследуется от QThread. Второй является наследником QWidget. В итоге при использовании сигнально-слотового соединения в консоль выдается следующее сообщение.
QObject::connect: Cannot queue arguments of type 'QByteArray&' (Make sure 'QByteArray&' is registered using qRegisterMetaType().)
Сигнал первого класса:
void sendBytes(QByteArray& arr);
Слот второго класса:
void receiveBytes(QByteArray&);
Соединение:
connect(ctch, SIGNAL(sendBytes(QByteArray&)), this, SLOT(receiveBytes(QByteArray&)));
Наследоваться от QThread плохо, читайте как правильно делать в Threads Events QObjects. Конкретно по Вашей ошибке: Вы передаёте lvalue-ссылку сквозь потоки, что крайне небезопасно. Qt не может упаковать такую ссылку и передать в другой поток, отсюда и ошибка. Используйте ссылку на константу или передачу по значению.
QByteArray является implicit sharing классом. Это означает что данный класс является оберткой вокруг указателя с подсчетом ссылок, реализующий поведение copy-on-write. При создании экземпляра-копии увеличивается счетчик ссылок. При изменении содержимого создается новая полная копия объекта с вносимыми изменениями для экземпляра где вносятся изменения, все остальные экземпляры не изменяются. Экземпляры классов с подсчетом ссылок бессмысленно передавать по ссылке, т.к. экономии при этом не достигается.
Передавайте QByteArray по значению
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости