Приветствую, столкнулся с такой задачей - надо между потоками сигнал-слотом прокинуть 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();
}