PyFideのQFileをサブクラス化してカスタム読み込み動作を実装しようとしています。しかし、以下の単純化されたコードに見られるように、サブクラスのreadData実装が単に親のreadData関数を呼び出す場合でも、返されるデータは正しくありません。 QBufferなどの他のQIODeviceをサブクラス化すると、不正な戻り値も発生します。誰もQIODeviceを正常にサブクラス化しましたか?QIODeviceサブクラスのreadDataをオーバーライドすると不正な結果が返される
from PySide import QtCore
class FileChild1(QtCore.QFile):
pass
class FileChild2(QtCore.QFile):
def readData(self, maxlen):
return super(FileChild2, self).readData(maxlen)
f1 = FileChild1('test.txt')
f1.open(QtCore.QIODevice.ReadWrite|QtCore.QIODevice.Truncate)
f1.write('Test text for testing')
f1.seek(0)
print 'FileChild1: ', repr(f1.read(50))
f2 = FileChild2('test2.txt')
f2.open(QtCore.QIODevice.ReadWrite|QtCore.QIODevice.Truncate)
f2.write('Test text for testing')
f2.seek(0)
print 'FileChild2: ', repr(f2.read(50))
>>> FileChild1: PySide.QtCore.QByteArray('Test text for testing')
>>> FileChild2: PySide.QtCore.QByteArray('─ Q ►│A☻ @ p¼a☻Test text for testing\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
Qtの元のC++バージョンでは、readDataは、データがchar配列に読み込まれ、長さが返される次の署名 'qint64 QIODevice :: readData(char * data、qint64 maxSize)'を持ちます。 PySideとPyQtでは、読み込まれたデータは文字列で直接返されます。この矛盾はそれと関係がありますか? – Narcolei
これはPyQt4(PyQt4:4.8.6、Qt:4.7.4)で期待どおりに動作します。おそらくPySideのバグでしょうか? – Avaris