我看不出有什麼理由不能做到這一點。就拿這個例子:
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實際上包含某些內容。
來源
2011-04-14 01:49:32
Liz
我可以使用'qobject_cast'嗎?而且,我可以使用typedef,比如'QCExpressionNode_ptr'作爲'QPointer'嗎? –
2011-04-14 02:04:30
@Nathan Moos文檔qobject_cast說:「qobject_cast()函數的行爲與標準C++ dynamic_cast()」類似,所以我認爲應該可以。我也嘗試添加typedef QPointer Parentptr;並使用它而不是每次都聲明它,並且它工作。所以,你也可以這樣做。 –
Liz
2011-04-14 15:56:50
謝謝!這完全回答了我的問題。 – 2011-04-16 00:00:57