2017-09-14 6 views
1

私は、TreeViewに代理人を実装しようとしています。デリゲートはLINEEDITとボタンで構成されなければならない:createEditor機能でPyQtユーザー定義のウィジェットを持つ代理人

class Ui_Data_Delegate(QWidget): 

    def __init__(self, *args, **kwargs): 
     super(Ui_Data_Delegate, self).__init__(*args, **kwargs) 
     self.setGeometry(QRect(10, 10, 271, 61)) 
     self.horizontalLayout = QHBoxLayout(self) 
     self.lineEdit = QLineEdit(self) 
     self.lineEdit.setObjectName("lineEdit") 
     self.horizontalLayout.addWidget(self.lineEdit) 
     self.ToolButton = QToolButton(self) 
     self.ToolButton.setObjectName("ToolButton") 
     self.horizontalLayout.addWidget(self.ToolButton) 

を私はUi_Data_Delegateクラスを呼び出す:

def createEditor(self, parent, option, index): 

    if type == UDF.DT_ResultsSelector: 

     editor = Ui_Data_Delegate(parent) 
     editor.ToolButton.released.connect(self.make_selection) 
     return editor 
    else: 
     return QStyledItemDelegate.createEditor(self, parent, option, index) 

しかし、その後、私はツリービューで任意のエディタが表示されません。 enter image description here

私は親パラメータミスをすれば:

def createEditor(self, parent, option, index): 

    if type == UDF.DT_ResultsSelector: 

     editor = Ui_Data_Delegate() 
     editor.ToolButton.released.connect(self.make_selection) 
     return editor 
    else: 
     return QStyledItemDelegate.createEditor(self, parent, option, index) 
を210

私が手:

enter image description here

これはほぼ正しいが、ウィジェットがツリービューのセルに表示されます!

私は間違っていますか?

答えて

1

答えが見つかりました。コンテンツマージンは設定されていません。 このコードでは、それは動作します:

class Ui_Data_Delegate(QWidget): 

    def __init__(self, *args, **kwargs): 
     super(Ui_Data_Delegate, self).__init__(*args, **kwargs)   
     self.horizontalLayout = QHBoxLayout(self) 
     self.horizontalLayout.setContentsMargins(0, 0, 0, 0) 
     self.lineEdit = QLineEdit(self) 
     self.lineEdit.setObjectName("lineEdit") 
     self.horizontalLayout.addWidget(self.lineEdit) 
     self.ToolButton = QToolButton(self) 
     self.ToolButton.setObjectName("ToolButton") 
     self.horizontalLayout.addWidget(self.ToolButton)