PyQt4 QStandardItem 需要设置输入掩码

2 投票
1 回答
982 浏览
提问于 2025-04-17 09:53

我有一个QTreeView(有100行)和一个QStandardItemModel(有10列)
每个表格单元格里都插入了QStandardItem的数据
在第二列,我需要一个格式为“0-00-00-0-0000”的输入掩码,但QStandardItem没有提供setInputMask("0-00-00-0-0000")这个方法。
我该怎么做?有没有更好的方法来实现这个,也许可以用QTableWidget?

self.model = QStandardItemModel(self)
self.model.setHorizontalHeaderLabels(header)

self.table = QTreeView()
self.table.setModel(self.model)

row=[]
for item in items:
    row.append( QStandardItem(item) )

1 个回答

3

你可以通过继承 QItemDelegate 来创建自定义的 Item Delegate,这样就能创建带有特定样式的编辑器。然后,你可以使用 setItemDelegateForColumn 来设置这个编辑器。

代理类的代码示例:

class MaskInputDelegate(QItemDelegate):

    def __init__(self, mask, parent=None):
        QItemDelegate.__init__(self, parent)
        self._mask = mask

    def createEditor(self, parent, option, index):
        editor = QLineEdit(parent)
        editor.setInputMask(self._mask)
        return editor

使用方法示例:

self.table.setItemDelegateForColumn(1, MaskInputDelegate('0-00-00-0-0000'))

有没有更好的方法来实现这个功能,或者用 QTableWidget 呢?

同样的解决方案也适用于 QTableWidget

撰写回答