2014-10-08 65 views
0

QDataStream Qt文檔它說如何在PySide和Python 3.X中將字節寫入QDataStream?

的QDataStream類提供的二進制數據的序列化到QIODevice中。

所以這就是我想要做的。我想在Python 3.X上的PySide中將字節發送到QDataStream

writeRawData但是預計unicode作爲輸入。

import zlib 
from PySide import QtCore 

file = QtCore.QFile("test.dat") 
file.open(QtCore.QIODevice.WriteOnly) 

data = "some text" 
compressed_data = zlib.compress(data.encode()) # type is now bytes 

out = QtCore.QDataStream(file) 
out.writeRawData(compressed_data) 

給出TypeError

TypeError: 'PySide.QtCore.QDataStream.writeRawData' called with wrong argument types: 
    PySide.QtCore.QDataStream.writeRawData(bytes) 
Supported signatures: 
    PySide.QtCore.QDataStream.writeRawData(unicode, int) 

此外從QDataStreamwriteBytes不受PySide(1.2.2)來實現。

那麼,如何通過PySide和Python 3.X中的QDataStream發送二進制數據?


背景:最後我想通過QDataStream二進制數據發送到QSocket方便,我想用zlib之前對其進行壓縮。

回答

0

我可以回答我自己的問題。解決方法是將字節字符串包裝在QByteArray中,並使用QDataStream的左移/右移操作符。

實施例用於寫入:

# wrap data (type byte) in QByteArray 
bytearray = QtCore.QByteArray(data) 

# write to data stream 
qdatastream << bytearray 

實施例用於讀:

# allocate empty qbytearray 
bytearray = QtCore.QByteArray() 

# read from data stream 
qdatastream >> bytearray