У меня есть эти 2 сигнала:
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 - это объект, перемещенный в поток, приложение живет в "основном" потоке.
Когда я посылаю сигналы в Application, слот, подключенный к dataSampled, который требует size_t, не выполняется, изменяя size_t на int (только сигнал, слот может оставаться size_t) или даже удаляя его, устраняет проблему. Это действительно странно, у кого-нибудь есть идея, почему сигнал не посылается? В другом приложении (но однопоточном) я проверил, что size_t отправляются из сигнала в слот без проблем (но опять-таки контекст отличается).
void AcquisitionManager::executeDataAcquisition()
{
emit dataSampled(666); // onDataSampled is never executed (only if I change signal type from size_t to an int or something else)
emit error("foobar"); // Application::showError is always executed !