qobject_cast не работает, но наследует, возвращает true - PullRequest
0 голосов
/ 04 августа 2020

У меня есть несколько классов:

class Class A { }
class Class B { }
class Class C : public QObject, public A, public B { Q_OBJECT }
class Class D : public C
{
  Q_OBJECT
  void somefunc() = 0;
}
class Class E : public D { Q_OBJECT } // This class iplements somefunc

В какой-то момент я создаю экземпляр E как указатель C:

C* pC = new E();

Затем мне нужно знаю, указывает ли pC на D, и я пробовал это:

D* pD = qobject_cast<D*>(pC);

В этом случае qobject_cast возвращает nullptr, но если это сделать, я получаю действительный указатель D:

if ( pC->inherits("D") )
{
  D* pD = static_cast<D*>(pC);
}

Должен ли qobject_cast работать в этом случае? Если нет, используется inherits и static_cast безопасно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...