【发布时间】:2015-05-29 13:45:09
【问题描述】:
我有一个 AbstractItemModel 我想映射到一些小部件。在窗口的构造函数中我有:
print("creating model")
self.model = Model(self.cluster)
print("creating mapper")
self.mapper = QtGui.QDataWidgetMapper()
print("setting model")
self.mapper.setModel(self.model)
print("setting root index")
self.mapper.setRootIndex(self.model.root_index())
print("setting index")
self.mapper.setCurrentIndex(0)
print("mapping widgets")
self.mapper.addMapping(self.realNameLineEdit, 1)
self.mapper.addMapping(self.emailLineEdit, 2)
self.mapper.addMapping(self.infoPlainTextEdit, 3)
print("done")
这会产生以下输出:
creating model
Model.__init__()
Model.rowCount(<PySide.QtCore.QModelIndex(0,0,0x7faa2ff446a0,Model(0x17c6f50) ) at 0x7faa2d9ea4c8>) = 0
Model.rowCount(<PySide.QtCore.QModelIndex(0,0,0x7faa2ff446a0,Model(0x17c6f50) ) at 0x7faa2d9d2888>) = 1
creating mapper
setting model
setting root index
Model.root_index()
setting index
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>) = 2
Model.index(0, 0, <PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>)
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 2
Model.columnCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 4
mapping widgets
Model.index(0, 1, <PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>)
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 2
Model.columnCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 4
Model.index(0, 2, <PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>)
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 2
Model.columnCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 4
Model.index(0, 3, <PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>)
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 2
Model.columnCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 4
done
对我来说,到目前为止看起来是正确的。但是没有一个映射的小部件显示任何数据。 Model.data() 甚至根本没有被调用(我也有打印)。
当我在 realNameLineEdit 中输入内容并按回车键时,我得到:
Model.setData(<PySide.QtCore.QModelIndex(0,1,0x7faa2da31908,Model(0x17c6f50) ) at 0x7faa2d9eadc8>, real name, 2)
看起来编辑通过映射器正确地传递到模型。那为什么不显示呢?
【问题讨论】:
-
将一个 QTableView 连接到模型,看看它实际上是否包含任何数据。并尝试在建立映射后调用
self.mapper.toFirst()。 -
我有一个 QComboBox 可以正确显示条目(第 0 列)。还要注意 rowCount() 返回 2。
self.mapper.toFirst()除了self.mapper.setCurrentIndex(0)之外还有什么作用吗? -
after 是解决方案。
标签: python-3.x pyqt pyqt4