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...