Qt의 모델 뷰 아키텍처를 배우려고합니다. 다음 코드에서 두 번 클릭하여 항목을 편집 할 때 data()가 계속 호출되는 방법이 궁금합니다. 그것?QAbstractListModel의 data() 호출
이 모형에서는 단순한 5 개 항목 목록이므로 문제가되지 않지만 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