如何将QLineEdit放入QTableView单元格PyQt4?

时间:2015-11-25 12:22:25

标签: python pyqt4 pyside qtableview qstandarditemmodel

所以这是我的模型,视图和代理模型:

class example(QDialog):
    def __init__(self):
        super(druglist, self).__init__()
        self.setMinimumWidth(745)
        self.UI()
    def UI(self):
        self.table_view=QTableView()
        self.table_model=QStandardItemModel()
        self.table_proxy=QSortFilterProxyModel()
        self.table_proxy.setSourceModel(self.table_model)
        self.table_view.setModel(self.table_proxy)

我将把QLineEdits放在我的表的每一列用于过滤目的。 我该怎么做?

1 个答案:

答案 0 :(得分:1)

delegate可以做到这一点。这是一个基本的例子。

表格视图的委托决定在编辑单元格时应使用哪个小部件。在此示例中,委托仅应用于第一列。 QLineEdit小部件的字符数限制为3,以便您可以区分它和其他列(否则看起来相同)。

class ExampleDelegate(QtGui.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        line_edit = QtGui.QLineEdit(parent)
        line_edit.setMaxLength(3)
        return line_edit


class Example(QtGui.QDialog):
    def __init__(self,):
        super(Example, self).__init__()
        self.build_ui()

    def build_ui(self):       
        self.table_model = QtGui.QStandardItemModel(4, 2)
        self.delegate = ExampleDelegate()
        self.table_view = QtGui.QTableView()
        self.table_view.setItemDelegateForColumn(0, self.delegate)
        self.table_view.setModel(self.table_model)

        self.layout.addWidget(self.table_view)
        self.layout = QtGui.QGridLayout()
        self.setLayout(self.layout)