Пишу так:
class Parent {
public:
virtual void someSignal() = 0;
};
class Child: public QObject, public Parent {
Q_OBJECT
public signals:
void someSignal() {}
};
Parent *pointer = getPointer();
connect(pointer, SIGNAL(someSignal), this, SLOT(someSlot())); // первый
connect(qobject_cast<QObject*>(pointer), SIGNAL(someSignal), this, SLOT(someSlot())); // второй
Первый вариант падает с
error: no matching function for call to 'Shooter::connect(Parent*&, const char*, Shooter* const, const char*)'
note: no known conversion for argument 1 from 'Parent*' to 'const QObject*'
error: no matching function for call to 'qobject_cast(Parent*&)'
note: candidates are: template<class T> T qobject_cast(QObject*)
А здесь мне уже не понятно, указатель ведь указывает на потомка, а его можно легко привести к QObject. Почему тогда так?