我試圖學習Qt的模型視圖體系結構,我想知道在下面的代碼中,如何在編輯項目後連續調用data(),雙擊後它?調用數據()在QAbstractListModel
在這個樣機中,它不是一個真正的問題,因爲它只是一個簡單的五項目列表,但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()
是的,這是相當期待的行爲 – armonge 2011-02-04 15:34:08