Запись своего класса в QDataStream

Пытаюсь записать свой класс в QDataStream

cbuffer.py

class CBuffer:
    def __init__(self) -> None:
        self.__val_1 = 'test_1'
        self.__val_2 = 10

    def __lshift__(self, *args, **kwargs):
        args[0].writeQString(self.__val_1)
        args[0].writeUInt64(self.__val_2)

    def __rlshift__(self, *args, **kwargs):  # этот медот вызывался в PyQt5 (Qt 5.10)
        args[0].writeQString(self.__val_1)
        args[0].writeUInt64(self.__val_2)
                                                  

main.py

import sys

from PySide2.QtCore import *

from cbuffer import CBuffer

if __name__ == '__main__':
    app = QCoreApplication(sys.argv)

    custom_class = CBuffer()

    b_array = QByteArray()
    d_stream = QDataStream(b_array, QIODevice.WriteOnly)
    d_stream << custom_class

ошибка

/usr/bin/python3.7 /home/user/example/main.py
Traceback (most recent call last):
  File "/home/user/example/main.py", line 14, in <module>
    d_stream << custom_class
TypeError: 'PySide2.QtCore.QDataStream.__lshift__' called with wrong argument types:
  PySide2.QtCore.QDataStream.__lshift__(CBuffer)
Supported signatures:
  PySide2.QtCore.QDataStream.__lshift__(str)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QBitArray)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QByteArray)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QCborArray)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QCborMap)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QCborValue)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QDate)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QDateTime)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QEasingCurve)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QJsonArray)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QJsonDocument)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QJsonValue)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QLine)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QLineF)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QLocale)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QMargins)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QMarginsF)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QPoint)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QPointF)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QRect)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QRectF)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QSize)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QSizeF)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QTime)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QUrl)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QUuid)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QRegularExpression)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QRegExp)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QTimeZone)
  PySide2.QtCore.QDataStream.__lshift__(PySide2.QtCore.QVersionNumber)

Process finished with exit code 1

в PyQt5 (Qt5.10) этот код работал. В PySide2 как это делается?


Ответы (0 шт):