gpt4 book ai didi

qt - QCompleter 自定义完成规则

转载 作者:行者123 更新时间:2023-12-01 16:32:59 42 4
gpt4 key购买 nike

我使用的是 Qt4.6,并且我有一个 QComboBox,里面有一个 QCompleter。

通常的功能是根据前缀提供完成提示(这些提示可以在下拉列表中而不是内联中 - 这是我的用法)。例如,给定

chicken soup
chilli peppers
grilled chicken

输入ch将匹配鸡汤辣椒,但不匹配烤鸡

我想要的是能够输入 ch 并匹配所有这些,或者更具体地说,chicken 并匹配 chicken soup烤鸡
我还希望能够将 chs 这样的标签分配给 chicken soup 以产生另一个匹配,而不仅仅是文本内容。我可以处理该算法,但是,

我需要重写 QCompleter 的哪些函数?
我不太确定我应该看哪里......

最佳答案

根据@j3frea的建议,这里是一个工作示例(使用PySide)。看来每次调用 splitPath 时都需要设置模型(在 setModel 中设置一次代理是行不通的)。

combobox.setEditable(True)
combobox.setInsertPolicy(QComboBox.NoInsert)

class CustomQCompleter(QCompleter):
def __init__(self, parent=None):
super(CustomQCompleter, self).__init__(parent)
self.local_completion_prefix = ""
self.source_model = None

def setModel(self, model):
self.source_model = model
super(CustomQCompleter, self).setModel(self.source_model)

def updateModel(self):
local_completion_prefix = self.local_completion_prefix
class InnerProxyModel(QSortFilterProxyModel):
def filterAcceptsRow(self, sourceRow, sourceParent):
index0 = self.sourceModel().index(sourceRow, 0, sourceParent)
return local_completion_prefix.lower() in self.sourceModel().data(index0).lower()
proxy_model = InnerProxyModel()
proxy_model.setSourceModel(self.source_model)
super(CustomQCompleter, self).setModel(proxy_model)

def splitPath(self, path):
self.local_completion_prefix = path
self.updateModel()
return ""


completer = CustomQCompleter(combobox)
completer.setCompletionMode(QCompleter.PopupCompletion)
completer.setModel(combobox.model())

combobox.setCompleter(completer)

关于qt - QCompleter 自定义完成规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5129211/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com