PySide PyQt QDataWidgetMapper

PySide PyQt QDataWidgetMapper

我尝试使用 QDataWidgetMapper 将 QtGui.QPlainTextEdit 连接到模型。 我没有收到任何错误,只是 TextEdit 中没有任何错误。 我不明白,也找不到很好的示例代码。

这是一些示例代码。 我真的希望有人能帮助我。

from PySide import QtCore, QtGui
import sys


class ComponentsListModel(QtCore.QAbstractListModel):
    def __init__(self, components=[], parent = None):
        super(ComponentsListModel, self).__init__(parent=None)
        self.components = components
        self.list = parent

    def rowCount(self, parent):
        return len(self.components)

    def data(self, index, role):
        row = index.row()

        if role == QtCore.Qt.DisplayRole:#index.isValid() and
            value = self.components[row]
            return value



class MainWindow(QtGui.QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self._build_ui()

    def _build_ui(self):
        self.layout = QtGui.QVBoxLayout()

        self.listView = QtGui.QListView()
        self.model = ComponentsListModel(components = ['1', '2', '3'])
        self.listView.setModel(self.model)
        self.text = QtGui.QPlainTextEdit()
        self.layout.addWidget(self.listView)
        self.layout.addWidget(self.text)
        self.setLayout(self.layout)

        self._mapper = QtGui.QDataWidgetMapper(self)
        self._mapper.setModel(self.model)
        self._mapper.setSubmitPolicy(QtGui.QDataWidgetMapper.AutoSubmit)
        self._mapper.addMapping(self.text, 0)
        self._mapper.toFirst()


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    app.setStyle('Plastique')
    mySW = MainWindow()
    mySW.show()
    sys.exit(app.exec_())

您需要在 ComponentsListModel class

内的数据函数中为 Qt.EditRole 添加条件
if role == Qt.EditRole: 
        value = self.components[row]
        return value