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
