Qt :: QueuedConnection не работает с некоторым объектом

В моем приложении мы имеем простую связь между сигнальным слотом.

    connect(&A, SIGNAL(signal(myObject)), &B, SLOT(slot(myObject));

Эта связь, к сожалению, приведет к рекурсии. Затем мы изменили его в

    connect(&A, SIGNAL(signal(myObject)), &B, SLOT(slot(myObject)), Qt::QueuedConnection);

и это больше не работает. Слот никогда не называется.

Я пытался изменить myObject для QString и работает как положено. Так что проблема в чем-то myObject что Qt не очень любит.

Я проверил Класс Qt.ConnectionType, сигналы & игровые автоматы а также QObject doc, находясь в поиске Qt::QueuedConnection но я не нашел разъяснения для моей ситуации.

Некоторые заметки о моем коде:

  • myObject разрушается сразу после испускания сигнала. Но это не должно быть проблемой, копия могла быть сделана (как я полагаю, для QString, которая не имеет этой проблемы, я имею в виду, даже если я передаю временный QString и уничтожить его сразу после выдачи сигнала, слот в любом случае называется как положено)

  • myObject это не QObjectи никто из его членов не является QObject (если это может иметь какое-то влияние)

  • myObject МОЖЕТ быть скопировано

  • Моя заявка является ОДНОЙ веткой

  • myObject не имеет конструктора по умолчанию (но я не думаю, что это должно влиять на него, так как копия может быть сделана)

  • Я использую Qt 5.7

У кого-нибудь есть какое-то разъяснение по этой проблеме?

Собственно, документация Qt::QueuedConnection кажется, не так подробно, см. ссылки, которые я разместил выше. У вас есть еще полезная ссылка?

0

Решение

Зарегистрируйте свой myObject:

qRegisterMetaType<MyObject>("myObject");

где MyObject — это имя класса. доктор

Между тем, Qt :: QueuedConnection для соединения через потоки, вы используете потоки?

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]