gpt4 book ai didi

c++ - 覆盖 QIODevice 子类中的 readData 返回不正确的结果

转载 作者:行者123 更新时间:2023-11-30 03:04:22 25 4
gpt4 key购买 nike

我正在尝试在 PySide 中子类化 QFile 以实现自定义读取行为。但是,如下面的简化代码所示,即使子类的 readData 实现只是调用了父类的 readData 函数,返回的数据也是不正确的。子类化其他 QIODevices 例如 QBuffer 也会导致不正确的返回值。有没有人成功子类化 QIODevice?

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')

最佳答案

我用 PyQt 4.8 和 PyQt 4.9 以及 Python 2.7.2/Qt 4.8.0 测试了你的脚本,在这两种情况下它都会产生以下输出:

FileChild1:  'Test text for testing'
FileChild2: 'Test text for testing'

所以 readData 返回一个字节串,按照 PyQt4 docs .

将 PySide 1.0.9 与 Python 2.7.2/Qt 4.8.0 结合使用,我得到以下输出:

FileChild1:  PySide.QtCore.QByteArray('Test text for testing')
FileChild2: PySide.QtCore.QByteArray('')

不确定为什么 PyQt4 和 PySide 之间的返回类型不同,但显然 PySide 中存在某种错误。

有错误报告 here看起来可能有点相关,但不是特别新(PySide 1.0.7)。

关于c++ - 覆盖 QIODevice 子类中的 readData 返回不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8658212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com