QCompleter可以结合QLineEdit和QComboBox进行输入补全的工作。QCompleter可以通过setFilterMode传入Qt.MatchStartsWith/Qt.MatchContains/Qt.MatchEndsWith三种参数,分别对应字符串头部匹配、包含匹配、尾部匹配三种不同的功能,但是无法通过传入自定义的正则表达式进行匹配补全。为了解决这个问题,需要对QCompleter重载,通过修改其中的updateModel方法,利用filterProxyModel.setFilterRegExp(正则表达式)将所需的正则表达式作为参数传入修改匹配规则。
QCompleter重载(一旦输入发生变化,则会调用splitPath。因此将正则表达式匹配变化写在updateModel中,通过splitPath调用):
class CustomQCompleter(QCompleter):
def __init__(self, *args):
super(CustomQCompleter, self).__init__(*args)
# 正则表达式
self.local_completion_prefix = ""
self.source_model = None
self.filterProxyModel = QSortFilterProxyMod