我正在看一个关于Qt的模型视图概念的教程,可能太简短了。下面的代码应该通过委托类用QSpinBox替换默认的QLineEdit。是什么问题导致仍然显示默认的QLineEdit?在
from PySide.QtGui import *
from PySide.QtCore import *
import sys
class MyListModel(QAbstractListModel):
def __init__(self, parent=None):
super(MyListModel, self).__init__(parent)
self._data = [70, 90, 20, 50]
def rowCount(self):
return len(self._data)
def data(self, index, role):
if role == Qt.DisplayRole:
return str(self._data[index.row()])
elif role == Qt.FontRole:
font = QFont()
font.setPointSize(16)
return font
elif role == Qt.EditRole:
return str(self._data[index.row()])
def setData(self, index, value, role=Qt.EditRole):
if role == Qt.EditRole:
self._data[index.row()] = int(value)
self.dataChanged.emit(index, index)
return True
return False
def flags(self, index):
flag = super(MyListModel, self).flags(index)
return flag | Qt.ItemIsEditable
class MyEditDelegate(QStyledItemDelegate):
def createEditor(self, parent, option, index):
sbox = QSpinBox(parent)
sbox.setRange(0, 100)
return sbox
def setEditorData(self, editor, index):
item_str = index.data(Qt.DisplayRole)
item_int = int(item_str)
editor.setValue(item_int)
def setModelData(self, editor, model, index):
data_int = editor.value()
data_str = str(data_int)
model.setData(index, data_str)
if __name__ == '__main__':
app = QApplication(sys.argv)
model = MyListModel()
delegate = MyEditDelegate()
view = QListView()
view.setModel(model)
view.setItemDelegate(delegate)
view.show()
sys.exit(app.exec_())
目前没有回答
相关问题 更多 >
编程相关推荐