我在TreeView上实现了一个委托和模型,它在第一列包含一个旋转框,但数字格式不正确。但是,在我点击旋转框后,它被正确设置。我正在使用PyQt5。
这里我附上了两张图片,可以更好地解释它。
第一次设置的值
单击旋转框
后,可以正确看到该值
以下是第一次初始化spinbox的代码:
def createEditor(self, parent, option, index):
item = index.internalPointer()
if index.column() == 0:
editor = super().createEditor(parent, option, index)
elif index.column() == 1:
name = item.get_data()[0]
data = item.get_data()[1]
editor = QtWidgets.QSpinBox(parent, minimum=-9999999999, maximum=9999999999)
# editor.setEditTriggers(QAbstractItemView.SelectedClicked)
editor.setObjectName(name)
editor.setValue(data)
editor.setStyleSheet("""
border-radius: 0px;
""")
editor.installEventFilter(self)
else:
editor = super().createEditor(parent, option, index)
return editor
我认为我在某个地方错过了一个comitData,但我不知道哪个地方更好地发射它,或者它是否是正确的方法。
谢谢你,
马塞尔
答案 0 :(得分:0)
问题解决了。
它不在委托中,它与QSpinBox没有任何关系,而是模型和str格式。
在功能数据上的QtCore.Qt.DisplayRole角色上,我做了正确的转换,正如我在以下代码中所示:
def data(self, in_index, role):
if not in_index.isValid():
return QVariant()
node = in_index.internalPointer()
if role == QtCore.Qt.DisplayRole:
if node.data(in_index.column()) is None:
return ''
if in_index.column() == 1:
return str(float(node.data(in_index.column())))
return str(node.data(in_index.column()))
谢谢大家。
此致
马塞尔