Model view controller PySide PyQt QDataWidgetMapper
我尝试使用QDataWidgetMapper将QtGui.QPlainTextEdit连接到模型。 我没有收到任何错误,只是文本编辑中没有任何错误。 我不明白,也找不到好的示例代码 下面是一些示例代码。 我真的希望有人能帮助我Model view controller PySide PyQt QDataWidgetMapper,model-view-controller,pyqt,pyside,Model View Controller,Pyqt,Pyside,我尝试使用QDataWidgetMapper将QtGui.QPlainTextEdit连接到模型。 我没有收到任何错误,只是文本编辑中没有任何错误。 我不明白,也找不到好的示例代码 下面是一些示例代码。 我真的希望有人能帮助我 from PySide import QtCore, QtGui import sys class ComponentsListModel(QtCore.QAbstractListModel): def __init__(self, components=[]
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
类中的数据函数中为Qt.EditRole
添加一个条件
if role == Qt.EditRole:
value = self.components[row]
return value
在
ComponentsListModel
类中的data
函数中,尝试添加if-role==Qt.EditRole:return self.components[row]
效果很好,谢谢我很高兴它有帮助,我给出了答案。