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 не очень любит.
Я проверил Class Qt.ConnectionType, Signals & Slots и QObject doc, в поисках Qt::QueuedConnection
но я не нашел разъяснения для моей ситуации.
Некоторые заметки о моем коде:
myObject
разрушается сразу после испускания сигнала. Но это не должно быть проблемой, копия могла быть сделана (как я полагаю, для QString, которая не имеет этой проблемы, я имею в виду, даже если я передаю временныйQString
и уничтожить его сразу после выдачи сигнала, слот в любом случае называется как положено)myObject
это неQObject
и никто из его членов не являетсяQObject
(если это может иметь какое-то влияние)myObject
МОЖЕТ быть скопированоМое приложение - ЕДИНСТВЕННАЯ нить
myObject
не имеет конструктора по умолчанию (но я не думаю, что это должно влиять на него, так как копия может быть сделана)Я использую Qt 5.7
У кого-нибудь есть какое-то разъяснение по этой проблеме?
Собственно, документация Qt::QueuedConnection
кажется, не так подробно, см. ссылки, которые я разместил выше. У вас есть еще полезная ссылка?
1 ответ
Зарегистрируйте свой myObject:
qRegisterMetaType<MyObject>("myObject");
где MyObject - это имя класса. доктор
Между тем, Qt::QueuedConnection для соединения через потоки, вы используете потоки?