第二个addMapping()
无效。
第二个QLineEdit
无法获取数据。如图所示:
这是所有代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import (QWidget, QLabel, QDataWidgetMapper,
QLineEdit, QApplication, QGridLayout)
from PyQt5.QtCore import QAbstractListModel, Qt
from PyQt5.QtWidgets import QListView
class Window(QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
# Set up the widgets.
self.nameEdit = QLineEdit()
self.nameEdit2 = QLineEdit()
layout = QGridLayout()
layout.addWidget(self.nameEdit, 0, 1, 1, 1)
layout.addWidget(self.nameEdit2, 0, 2, 1, 1)
self.setLayout(layout)
def setModel(self, model):
# Set up the mapper.
self.mapper = QDataWidgetMapper(self)
self.mapper.setModel(model)
self.mapper.addMapping(self.nameEdit, 0)
self.mapper.addMapping(self.nameEdit2, 1)
self.mapper.toFirst()
class MyModel(QAbstractListModel):
def __init__(self, data=[], parent=None):
# super().__init__(parent)
super(MyModel, self).__init__(parent)
self.__data = data
def rowCount(self, index_parent=None, *args, **kwargs):
return len(self.__data)
def data(self, index, role=Qt.DisplayRole, parent=None):
if not index.isValid():
return None
if index.row() > len(self.__data):
return None
if role == Qt.DisplayRole or role == Qt.EditRole:
return self.__data[index.row()][index.column()]
return None
def flags(self, index):
flags = super(MyModel, self).flags(index)
if index.isValid():
flags |= Qt.ItemIsEditable
flags |= Qt.ItemIsDragEnabled
else:
flags = Qt.ItemIsDropEnabled
return flags
def setData(self, index, value, role=Qt.EditRole):
if not index.isValid() or role != Qt.EditRole:
return False
self.__data[index.row()][index.column()] = value
self.dataChanged.emit(index, index)
return True
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
myModel = MyModel([['line 1', 'line1 col2'],
['line 2', 'line2 col2'],
['line 3', 'line3 col2'],
['line 4', 'line4 col2']])
mywindow = Window()
mywindow.setModel(myModel)
qlistview2 = QListView()
qlistview2.setModel(myModel)
mywindow.show()
qlistview2.show()
sys.exit(app.exec_())
答案 0 :(得分:0)
我发现了问题。问题本身解决了我的问题:
QDataWidgetMapper: wrong mapping
我使用了错误的父模型QAbstractListModel
。 QAbstractTableModel
非常适合我的申请。也许我也可以改变QAbstractListModel
的方向,但我不知道如何。