QPointer mit const T*
Verfasst: 22. September 2009 09:57
Hallo,
ich habe in mehreren Klassen einen Zeiger auf eine andere Klasse Map gespeichert, der sich ziemlich oft ändern kann. deshalb ist mir die Idee gekommen, diesen in einem QPointer zu speichern, also:
Laut Doku wird der QPointer ja auf 0 gesetzt, wenn das darunterliegende Objekt gelöscht wird. Leider lässt sich so kein const-Pointer speichern, also:
wenn ich dann einen const-Zeiger zuweisen will mit
bekomme ich einen Fehler:
Um dennoch zu verhindern, dass das den QPointer enthaltene Objekt die Map ändern kann, muss ich als Workaround
schreiben und dann intern immer über die get-Methode currentMap() arbeiten.
Deshalb meine Frage: Ist das ein Bug/Feature von QPointer, oder ist es nicht vorgesehen, Pointer auf const-Objekte zu speichern?
Danke für alle Hinweise...
ich habe in mehreren Klassen einen Zeiger auf eine andere Klasse Map gespeichert, der sich ziemlich oft ändern kann. deshalb ist mir die Idee gekommen, diesen in einem QPointer zu speichern, also:
Code: Alles auswählen
QPointer<Map> mCurrentMap
Code: Alles auswählen
QPointer<const Map>
Code: Alles auswählen
void setCurrentMap(const Map* map)
{
mCurrentMap = map;
}
was daran liegt, dass intern QPointer eben ein QObject* o speichert.d:\programme\qt\4.5.2\include\qtcore\../../src/corelib/kernel/qpointer.h(68) : error C2664: 'QMetaObject::changeGuard' : cannot convert parameter 2 from 'const Map *' to 'QObject *'
Conversion loses qualifiers
d:\programme\qt\4.5.2\include\qtcore\../../src/corelib/kernel/qpointer.h(68) : while compiling class template member function 'QPointer<T> &QPointer<T>::operator =(T *)'
with
[
T=const Map
]
Um dennoch zu verhindern, dass das den QPointer enthaltene Objekt die Map ändern kann, muss ich als Workaround
Code: Alles auswählen
class A
{
private:
QPointer<Map> mCurrentMap;
public:
void setCurrentMap(const Map* map)
{
mCurrentMap = const_cast<Map*>(map);
}
const Map* currentMap() const
{
return mCurrentMap;
}
[...]
};
Deshalb meine Frage: Ist das ein Bug/Feature von QPointer, oder ist es nicht vorgesehen, Pointer auf const-Objekte zu speichern?
Danke für alle Hinweise...