2012-12-02 3 views
0

Est-il possible d'utiliser QPointer avec QHash?QPour entrer dans QHash

QPointer<QHash<QString, QPointer<QStringList>> > pHash; 
+0

Je devrais dire que le code compile, mais j'ai des erreurs étranges. – user635818

Répondre

3

QPotter ne peut être utilisé qu'avec des sous-classes QObject. Ainsi, il ne peut pas être utilisé avec QHash ou QStringList, car les deux ne sont pas QObject. Si le code ci-dessus compile pour vous, c'est probablement parce que vous n'utilisez pas encore pHash? Même en initialisant un tel QPointer, par ex.

QPointer<QHash<QString, QString> > foo(new QHash<QString, QString>()); 

donne des erreurs comme le suivant (gcc):

error: cannot convert ‘QHash<QString, QString>*’ to ‘QObject*’ in initialization 

Si vous avez vraiment besoin (intelligents) des pointeurs vers des conteneurs, essayez QSharedPointer, qui ne nécessite pas l'objet contenu à être de tout type spécifique. Normalement, on crée des conteneurs sur la pile, mais les créer sur le tas est unidimensionnel et inutile dans presque tous les cas. Les conteneurs de Qt sont implicitly shared, donc les copier n'est pas cher.

+0

+1 pour repérer que 'QPointer' ne peut être utilisé qu'avec' QObject'. +1 pour l'alternative 'QSharedPointer'. Et +1 pour repérer que les conteneurs sont implicitement partagés :). –

+0

Oui, c'est quand j'essaie d'utiliser pHash que j'obtiens les erreurs. Merci beaucoup pour votre belle réponse et l'alternative. – user635818

Questions connexes