我正在尝试学习Qt的模型 - 视图架构,我想知道为什么在下面的代码中,在双击它之后编辑项目时会连续调用data()?
在这个模型中,它不是一个真正的问题,因为它是一个简单的五项列表,但Qt似乎在连续查找模型中所有行/列的数据。这是预期的行为,还是我错过了一些避免这样的代码片段,因此对文件/对象没有额外的,可能是昂贵的调用,而模型可以访问这些数据?
如果它有所作为,我正在使用PyQt4 v4.8.2。提前谢谢!
from PyQt4 import QtCore, QtGui
class Model(QtCore.QAbstractListModel):
def __init__(self):
QtCore.QAbstractTableModel.__init__(self)
self.table = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"]
self.i = 0
def setData(self, index, value, role = QtCore.Qt.EditRole):
value = QtCore.QVariant.toPyObject(value)
print "setData:",value
row = index.row()
self.table[row] = value
self.emit(QtCore.SIGNAL("dataChanged( const QModelIndex&, const QModelIndex& )"), index, index)
return True
def rowCount(self,parent):
return 5
def flags(self, index):
return QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled
def data(self,index,role):
if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole:
row = index.row()
self.i = self.i + 1
print self.i
return self.table[row]
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
m = Model()
view = QtGui.QListView()
view.setModel(m)
view.show()
view2 = QtGui.QTableView()
view2.setModel(m)
view.show()
view2.show()
app.exec_()
sys.exit()
答案 0 :(得分:1)
我相信每次Qt
重新绘制你的GUI(比如用户上下滚动,让窗口聚焦等)Qt
会重绘,那就是它会调用.data()
答案 1 :(得分:0)
这可能只是调试器。到达断点时,如果调试器绘制了列表视图,那么一旦继续执行,它就会重新绘制。尝试保持调试器和列表视图在屏幕上彼此分开,看看这是否会发生任何变化。