Qt,第一次在TreeView

时间:2017-10-31 13:47:48

标签: qt pyqt treeview

我在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,但我不知道哪个地方更好地发射它,或者它是否是正确的方法。

谢谢你,

马塞尔

1 个答案:

答案 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()))

谢谢大家。

此致

马塞尔