[Qt-interest] QSharedPointer and QMap/QHash

Rudenko Eugene erule.biz at gmail.com
Fri Feb 12 16:11:10 CET 2010


Thank you for solution, I have found the same solution before.
But why Qt's guys have not added it to QHash source file?
I tried to find reason: maybe it's breaks something or simply forget ? 

> Hi,
> 
> The following works for me:
> 
> template <class T>
> uint qHash( const QSharedPointer<T> &p )
> {
>     return qHash( p.data() );
> }
> 
> Dan
> 
>> Thank you for reply, But It's not tiny way to implement qHash for every type of QSharedPointer<Class1>, QSharedPointer<Class2> and so on.  Is it only way?
>> 
>> 
>>> Hi,
>>> 
>>> Indeed, QHash can only handle keys with a class that has a qHash 
>>> function already. As you can see 
>>> (http://doc.trolltech.com/4.5/qhash.html) there are already a number of 
>>> such functions for the mose common types. You'll have to define your own 
>>> qHash function taking a QSharedPointer as argument and returning a uint. 
>>> You can for example return the result of qHash(sharedPointer.data()) 
>>> since there is a qHash function for the pointer type.
>>> 
>>> I hope this can help you.
>>> Regards,
>>> 
>>> Alex
>>> 
>>> 
>>> Rudenko Eugene a écrit :
>>>> Hello.
>>>> I'm trying to use QMap/QHash with QSharedPointer with no success.
>>>> 
>>>> For example, such code:
>>>> ===============================
>>>> class MyClass : QObject {
>>>> Q_OBJECT
>>>> ..........
>>>> QMap< QSharedPointer<MyClass>, int > mm;  //or QHash
>>>> }
>>>> 
>>>> 
>>>> ........
>>>> QSharedPointer<MyClass> a = b.getPointer();
>>>> mm.insert(a,0);
>>>> 
>>>> ===============================
>>>> I have got error:
>>>> in case of use QHash:
>>>> no matching function to call to 'qHash(const QSharedPointer<MyClass> & )'
>>>> candidates: ..........
>>>> 
>>>> 
>>>> in case of use QMap:
>>>> no match for 'operator<' in 'key1 < key2'
>>>> candidates are ........
>>>> 
>>>> 
>>>> As I can see, there are no overloaded operators "<" and "qHash" for QSharedPointer, to redirect it to containing object.
>>>> As I can understand, QSharedPointer is not suitable to use with QMap and QHash, Is I right?
>>>> How can I use container classes with smart pointer classes ?
>>>> 
>>>> 
>>>> With best regards, Eugene Rudenko.
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Qt-interest mailing list
>>>> Qt-interest at trolltech.com
>>>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>>>> 
>>>> 
>>> 
>>> -- 
>>> Alexandre BERAUD
>>> Ingénieur Développement
>>> 
>>> Infflux - Informatique & Flux
>>> Tel: 01 49 57 92 00 - Fax : 01 49 57 92 01
>>> Mail: aberaud at infflux.com
>>> Visitez notre site :  www.infflux.com
>>> 
>>> _______________________________________________
>>> Qt-interest mailing list
>>> Qt-interest at trolltech.com
>>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>> 
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest





More information about the Qt-interest-old mailing list