保存 class 包含 pyqt 对象的数据

Saving class data containing pyqt objects

我正在构建一个 PyQt 应用程序,我是 python 的新手。假设我将一个 obj 项目存储在定义的 class:

class Item (self):
    def __init__(self, item_nbr, crop_pixmap, originepoint, designation):
        self.item_nbr = item_nbr            # integer
        self.crop_pixmap = crop_pixmap      # QPixmap
        self.origin_point = originpoint     # QPoint
        self.designation = designation      # str

然后我通过 GUI 执行其他操作并创建项目列表。如何保存此列表以便以后打开它? pickle 不适用于 QPixmap,我想保存一个。

您可以使用 QSettings to save all your application data. It will automatically convert data types like QPixmap, QPoint, QColor, etc. By default, the settings are saved in a platform-independant way,但如果需要,您也可以保存到自定义位置。

这里是你如何 read/write 你的 Item class:

def settings(self):
    # use a custom location
    return QtCore.QSettings('app.conf', QtCore.QSettings.IniFormat)

def readSettings(self):
    self.items = []
    settings = self.settings()
    for index in range(settings.beginReadArray('items')):
        settings.setArrayIndex(index)
        self.items.append(Item(
            settings.value('number', -1, int),
            settings.value('pixmap', None, QtGui.QPixmap),
            settings.value('point', None, QtCore.QPoint),
            settings.value('designation', '', str),
            ))

def writeSettings(self):
    settings = self.settings()
    settings.beginWriteArray('items')
    for index, item in enumerate(self.items):
        settings.setArrayIndex(index)
        settings.setValue('number', item.item_nbr)
        settings.setValue('pixmap', item.crop_pixmap)
        settings.setValue('point', item.origin_point)
        settings.setValue('designation', item.designation)
    settings.endArray()

QSettings.value() 的 PyQt 版本允许您指定默认值和值的预期类型。