Ich versuche, von QObject * zu einem benutzerdefinierten Klassentyp zu konvertieren, aber der Zeiger, der diese Besetzung erhalten soll, ist immer NULL.qobject_cast gibt null zurück
Die entsprechenden Codezeilen:
Dies ist die Funktion mit dem gegossenen
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;
}
Diese im Haupt Konstruktor FCInterface genannt:
`CFCInterface::CFCInterface(QObject* parent): CInterface(parent), CFCAbstract()
{
//Some other functions being called
fnAddConn();
}
CFCInterface::~CFCInterface()
{
}
`
f_pConn bleibt NULL. Wenn irgendjemand raten könnte, warum das so ist, werde ich etwas zu folgen haben.
Als Referenz werde ich die Klasse und Header-Datei hinzufügen. Sie haben keine andere Funktion, als diesen Cast zu arbeiten.
Rubrik:
#include headers
class CFCConnections: public CResourceItem
{
Q_OBJECT
public:
CFCConnections(QObject*);
~CFCConnections();
};
#endif
Klasse:
#include headers
CFCConnections::CFCConnections(QObject* parent) : CResourceItem(parent)
{
//Empty contructor
}
CFCConnections::~CFCConnections()
{
}
PS: Ich glaube nicht, was der Code versucht, relevant zu tun hier, aber falls jemand FCInterface wundert ist die Mutter Klasse zu FCConnections. Ich versuche, eine Baummodellliste zu implementieren, in der jedes Element seine eigene Klasse und Funktionalität hat. Ich verwende die Besetzung, um "Verbindungen" unter FCInterface erscheinen zu lassen.
einen Haltepunkt hinzufügen in „QObject * f_pObject = diesem,“, dann prüfen, was das eigentlich zeigt, und mit dem Debugger durch folgen, bis Sie auf die Besetzung bekommen. – ManuelH
@ManuelH Ich habe gerade das gemacht. 'f_pConn' wird als Nullzeiger initialisiert. In der Zeile, nach der Sie gefragt haben, erhält 'f_pObject' die Adresse von _this_. Danach schlägt der 'qobject_cast' fehl und' f_pConn' bleibt als Nullzeiger übrig. 'f_pObject' ruft die Adresse des Elterns ab und die Schleife wird neu gestartet. Die dem 'f_pObject' am Ende zugewiesene Adresse ändert sich mit jeder Schleife und die Schleife wird beendet, wenn' f_pObject' zu einem Nullzeiger wird. Ich bekomme nichts von diesem Verhalten –