Я не вижу причин, почему вы не можете этого сделать.Возьмите этот пример:
class Parent : public QObject
{
public:
virtual void AbstractMethod() = 0;
};
class Child: public Parent
{
public:
virtual void AbstractMethod() { }
QString PrintMessage() { return "This is really the Child Class"; }
};
Теперь инициализируйте QPointer следующим образом:
QPointer<Parent> pointer = new Child();
Затем вы можете вызывать методы для «абстрактного» класса, как обычно с QPointer
pointer->AbstractMethod();
В идеале этого будет достаточно, потому что вы можете просто получить доступ ко всему, что вам нужно, с помощью абстрактных методов, определенных в родительском классе.
Однако, если вам действительно нужно провести различие между дочерними классами или использовать что-то, что существует только в дочернем классе, вы можете использовать dynamic_cast.
Child *_ChildInstance = dynamic_cast<Child *>(pointer.data());
// If _ChildInstance is NULL then pointer does not contain a Child
// but something else that inherits from Parent
if (_ChildInstance != NULL)
{
// Call stuff in your child class
_ChildInstance->PrintMessage();
}
Надеюсь, это поможет.
Дополнительное примечание: Вы также должны проверить pointer.isNull (), чтобы убедиться, что QPointer действительно содержит что-то.