Приветствую, столкнулся с такой задачей - надо между потоками сигнал-слотом прокинуть QVector<QSharedPointer<Tester> >
Tester - мой класс, унаследованный от QObject'а.
При попытке сделать в лоб ругается, что надо регистрировать метатип.
Если пытаюсь после объявления класса Tester добавить
typedef QVector<QSharedPointer<Tester> > TestPointerVector;
Q_DECLARE_METATYPE(TestPointerVector);
А в main() сделать
qRegisterMetaType<TestPointerVector>();
То не собирается, выдаёт ошибки из qmetatype.h и qtypeinfo.h о том, что к этому франкенштейну и sizeof не применить, и тип его неполный.
Как вообще это сделать правильно?
Тестовый main() выглядит следующим образом
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qRegisterMetaType<TestPointerVector>();
Receiver* rcv = new Receiver(0);
Emitter* emt = new Emitter(0);
QThread* thread = new QThread();
QObject::connect(rcv, SIGNAL(finished()), thread, SLOT(quit()));
QObject::connect(rcv, SIGNAL(finished()), rcv, SLOT(deleteLater()));
QObject::connect(emt, SIGNAL(send(TestPointerVector)), rcv, SLOT(receive(TestPointerVector)), Qt::QueuedConnection);
rcv->moveToThread(thread);
thread->start();
emt->process();
while(!thread->isFinished())
continue;
return a.exec();
}