QLineEdit在setText之后不显示文本

拉尔斯

我感到难过。在下面的代码中:

class LineEdit(QtGui.QLineEdit):

def __init__(self, value="", parent=None, commit=None):
    super(LineEdit, self).__init__(parent=parent)
    self.setText("blabla")
    self.commit = commit
    self.editingFinished.connect(self.on_change)
    print self.text()

self.text()为“ blabla”,但LineEdit不显示文本,并且在编辑self.text()后为“”。在QStyledItemDelegate()中为QTreeView()创建带有createEditor()的编辑器。

谁能向我解释为什么会发生这种情况以及如何解决?

ekhumoro

如果您使用的是项目委托,则编辑器中显示的初始文本将从该模型中获取,所有现有文本都将被覆盖。

要控制在编辑之前和之后发生的情况,请重新实现项目委托setEdtorDatasetModelData方法:

class Delegate(QtGui.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        if index.column() < 2:
            return LineEdit(parent)
        return super(Delegate, self).createEditor(parent, option, index)

    def setEditorData(self, editor, index):
        if index.column() == 0:
            editor.setText('blabla')
        elif index.column() == 1:
            editor.setText(index.data().toString())
            # Python 3
            # editor.setText(index.data())
        else:
            super(Delegate, self).setEditorData(editor, index)

    def setModelData(self, editor, model, index):
        if index.column() < 2:
            value = editor.text()
            print(value)
            model.setData(index, value, QtCore.Qt.EditRole)
        else:
            super(Delegate, self).setModelData(editor, model, index)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章