我想從QObject *強制轉換爲自定義類類型,但應該接受此強制轉換的指針始終爲NULL。qobject_cast返回null
代碼的相關線路:
這是跟投
void CFCInterface::fnAddConn()
{
CFCConnections* f_pConn ;
f_pConn= new CFCConnections(this);
QObject* f_pObject = this;
while(f_pObject)
{
f_pConn = qobject_cast<CFCConnections*>(f_pObject);
if(f_pConn)
break;
f_pObject = f_pObject->parent();
}
if(f_pConn == 0)
return;
}
這被稱爲FCInterface的主要構造函數:
`CFCInterface::CFCInterface(QObject* parent): CInterface(parent), CFCAbstract()
{
//Some other functions being called
fnAddConn();
}
CFCInterface::~CFCInterface()
{
}
`
f_pConn保持爲NULL。如果任何人都可以猜測爲什麼這樣,我會有一些領先的跟隨。
僅供參考,我將添加類和頭文件。他們沒有任何功能,除了做這個演員工作。
頁眉:
#include headers
class CFCConnections: public CResourceItem
{
Q_OBJECT
public:
CFCConnections(QObject*);
~CFCConnections();
};
#endif
類:
#include headers
CFCConnections::CFCConnections(QObject* parent) : CResourceItem(parent)
{
//Empty contructor
}
CFCConnections::~CFCConnections()
{
}
PS:我覺得沒有什麼代碼試圖做的是與此有關,但如果你想知道FCInterface是父班級FCC連接。我試圖實現一個樹型列表,其中每個項目都有其自己的類和功能。我正在使用演員陣列在FCInterface下顯示「連接」。
在添加斷點「的QObject * f_pObject =這一點;」,然後檢查一下這個實際上是指向與調試器跟進直到你到鑄造。 – ManuelH
@ManuelH我做到了這一點。 'f_pConn'被初始化爲一個空指針。在你問到的那一行中,'f_pObject'得到_this_的地址。之後,'qobject_cast'失敗,'f_pConn'保持爲空指針。 'f_pObject'獲取父節點的地址,並重新啓動循環。分配給'f_pObject'的地址在每個循環中都會改變,當'f_pObject'變爲空指針時,循環會退出。我沒有得到任何這種行爲 –