On Wed, 3 Feb 2010 19:24:28 +0800 (CST), donglongchao
<[email protected]>
wrote:
> 在2010-02-03 17:41:17,"Phil Thompson" <[email protected]>
> 写道: >On Wed, 3 Feb 2010 10:31:44 +0800 (CST), donglongchao
>><[email protected]> >wrote: >> Hi,all >>  >> I am newbie to PyQt and I
> have a question when I work on my app with >PyQt. >> I want to use a
> QDataStream to form a QHash object into a QByteArray and >> write it into
a
> QTcpSocket.But there is an error when I run my app said  >> NameError:
> global name 'QHash' is not defined.I have import everything >from >>
QtCore
> and QtGui.Also I can locate qhash.sip in my computer >>
> (/usr/share/sip/PyQt4/QtCore/qhash.sip).So I want to know wherer is the
>>
> problem and how to use QHash here. > >In C++ QHash is a template. For the
> classes that Qt provides a qHash() >implementation, PyQt implements the
> __hash__ method so that hash() returns >the value that qHash() returns.
> 
> But I still do not know how to create an object like QHash<int,QString>.I
> checked the file qhash.sip and find that 
>  QHash<TYPE1, TYPE2> is implemented as a Python dictionary.So is it
>  possible to convert a dict object into a QHash<TYPE1,TYPE2> object?

No, because templates are instantiated at compile-time not run-time.

> Because
>  I can not use a dict object with QDataStream's operator "<<" directly.

You can read and write the dict items individually.

Alternatively (if the dict can be pickled) you can use
QDataStream.writeQVariant(). The dict will be converted to a QVariant
automatically. Use QDataStream.readQVariant() to read it back and
QVariant.toPyObject() to get the dict from the QVariant.

Phil
_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to