Yes they are not related. I've checked that it only breaks once in that function as well.
As I said in my first post, it looks like the wrong signal is emitted by the meta object system.
int Qtilities
::Core::Observer::qt_metacall(QMetaObject::Call _c,
int _id,
void **_a
) {
_id
= QObject::qt_metacall(_c, _id, _a
);
if (_id < 0)
return _id;
switch (_id) {
case 0: modificationStateChanged((*reinterpret_cast< bool(*)>(_a[1]))); break;
case 1: monitoredPropertyChanged((*reinterpret_cast< const char*(*)>(_a[1])),(*reinterpret_cast< QList<QObject*>(*)>(_a[2]))); break;
case 2: monitoredPropertyChanged((*reinterpret_cast< const char*(*)>(_a[1]))); break;
case 3: propertyChangeFiltered((*reinterpret_cast< const char*(*)>(_a[1])),(*reinterpret_cast< QList<QObject*>(*)>(_a[2]))); break;
case 4: propertyChangeFiltered((*reinterpret_cast< const char*(*)>(_a[1]))); break;
case 5: numberOfSubjectsChanged((*reinterpret_cast< Observer::SubjectChangeIndication(*)>(_a[1])),(*reinterpret_cast< QList<QObject*>(*)>(_a[2]))); break;
case 6: numberOfSubjectsChanged((*reinterpret_cast< Observer::SubjectChangeIndication(*)>(_a[1]))); break;
case 7: layoutChanged
((*reinterpret_cast<
QObject*(*)>
(_a
[1])));
break;
case 8: layoutChanged(); break;
default: ;
}
int Qtilities::Core::Observer::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QObject::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
switch (_id) {
case 0: modificationStateChanged((*reinterpret_cast< bool(*)>(_a[1]))); break;
case 1: monitoredPropertyChanged((*reinterpret_cast< const char*(*)>(_a[1])),(*reinterpret_cast< QList<QObject*>(*)>(_a[2]))); break;
case 2: monitoredPropertyChanged((*reinterpret_cast< const char*(*)>(_a[1]))); break;
case 3: propertyChangeFiltered((*reinterpret_cast< const char*(*)>(_a[1])),(*reinterpret_cast< QList<QObject*>(*)>(_a[2]))); break;
case 4: propertyChangeFiltered((*reinterpret_cast< const char*(*)>(_a[1]))); break;
case 5: numberOfSubjectsChanged((*reinterpret_cast< Observer::SubjectChangeIndication(*)>(_a[1])),(*reinterpret_cast< QList<QObject*>(*)>(_a[2]))); break;
case 6: numberOfSubjectsChanged((*reinterpret_cast< Observer::SubjectChangeIndication(*)>(_a[1]))); break;
case 7: layoutChanged((*reinterpret_cast< QObject*(*)>(_a[1]))); break;
case 8: layoutChanged(); break;
default: ;
}
To copy to clipboard, switch view to plain text mode
As I said, the debugger steps into case 8 in the above code so I'm pretty sure the problem is with the delivery of the signal, rather than the receiving side. At least it looks like that.
One thing I don't understand is the following:
The class emitting the signal is called Observer. The instance on which the signal is emitted is called TreeNode which inherits Observer. Stepping through the debugger the signal emission goes into the qt_metacall function of TreeNode and then basically calls qt_metacall on the Observer base class. This is the piece of code I'm referring to:
int Qtilities
::CoreGui::TreeNode::qt_metacall(QMetaObject::Call _c,
int _id,
void **_a
) {
_id = Observer::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
int Qtilities::CoreGui::TreeNode::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = Observer::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
To copy to clipboard, switch view to plain text mode
The above funciton is entered with _id = 12, however as soon as it steps into the base class observer the base class gets _id = 8 as the parameter which is the signal with the default argument. Maybe I don't know the moc system that well and its correct but it does not make sense to me.
Bookmarks