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

Posted

技术标签:

【中文标题】如何将 QLineEdit 放入 QTableView 单元格 PyQt4?【英文标题】:How to put a QLineEdit into QTableView cell PyQt4? 【发布时间】:2015-11-25 12:22:24 【问题描述】:

这是我的模型、视图和代理模型:

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 以进行过滤。 我该怎么做?

【问题讨论】:

您的意思是对每个项目进行行编辑,还是仅对列标题进行编辑? 仅用于列标题,例如我表的第一行中的一组行编辑。通过表内的行编辑搜索列中的项目(而不是外行编辑搜索字段) Using a QCompleter in a QTableView with Qt and Python的可能重复 @tmoreau 这对我不起作用 【参考方案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)

【讨论】:

如果你想要一个预定义的选项列表@IMAN4K,你也可以让你的代理返回一个QComboBox 非常感谢。但是对于我的一般用途(过滤列项目)我应该如何将 line_edit.textChanged 连接到我的代理模型(在子类 ItemDelegate 中)。我应该以不同的方式使用 ItemDelegate 吗?再次感谢

以上是关于如何将 QLineEdit 放入 QTableView 单元格 PyQt4?的主要内容,如果未能解决你的问题,请参考以下文章

设置 QLineEdit 的高度

QLineEdit 不使用 setText 更新

如何使 QPushButtons 将文本添加到 QLineEdit 框中?

如何将 QLineEdit 文本传递给 MS Access DB?

如何从 QLineEdit 访问值?

将 QtCreator 中的 Qt 对象放入 Python 列表中