2015-01-10 148 views
1

我很難過。在下面的代碼: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()是「布拉布拉」,但LineEdit不顯示文本和編輯self.text後()是「」。 編輯器是在QStyledItemDelegate()中用QTreeView()的createEditor()創建的。

任何人都可以向我解釋爲什麼發生這種情況,以及如何解決它?

+0

你能否提供更多的代碼,你也有打印輸出一些? – ProgrammingIsAwsome

回答

4

如果您使用的是項目委託,編輯器中顯示的初始文本將從模型中獲取,並且任何現有文本都將被覆蓋。

要控制在編輯之前和之後發生的事情,重新實現項目委託的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) 
+0

明確並解決了至少一個其他問題,在文檔中也不清楚 – Lars