Qt 另一个线程';s槽

Qt 另一个线程';s槽,qt,Qt,我有两个信号: void dataSampled(size_t a); void error(const QString& message); 其他地方: m_acquisitionThread = new QThread(this); m_acquisitionManager = new AcquisitionManager(); QObject::connect(m_acquisitionManager, &AcquisitionManager::d

我有两个信号:

void dataSampled(size_t a);
void error(const QString& message);
其他地方:

    m_acquisitionThread = new QThread(this);
    m_acquisitionManager = new AcquisitionManager();
    QObject::connect(m_acquisitionManager, &AcquisitionManager::dataSampled,
                     this,                 &Application::onDataSampled); // this Application pointer
    QObject::connect(m_acquisitionManager, &AcquisitionManager::error,
                     this,                 &Application::showError); // this Application pointer
    m_acquisitionManager->moveToThread(m_acquisitionThread);
    m_acquisitionThread->start();
AcquisitionManager是一个移动到线程的对象,应用程序位于“主”线程中

当我向应用程序发送信号时,连接到dataSampled的需要大小的插槽不会被执行,通过int改变大小(只有信号,插槽可以保持大小),甚至移除它可以解决问题。这真的很奇怪,有人知道为什么不发送信号吗?在另一个应用程序(但单线程)中,我测试了大小\u t从信号发送到插槽时没有问题(但上下文也不同)


注册大小\u t修复了该问题:

 qRegisterMetaType<size_t>("size_t");
qRegisterMetaType(“size_t”);

但是,大小不是像int这样的基本类型吗?

请参见
std::size\u t
和其他标题中定义为某些实际基元类型的别名。它不是完全原始的,即使它是内置的
sizeof
操作符的结果。。。这就是C++中的生命,其中STDLIB的某些部分是使用核心特征必不可少的。@您是否尝试过使用Qt::QueuedConnection连接?这样就可以处理它,而不必将其注册为元类型。
 qRegisterMetaType<size_t>("size_t");