gpt4 book ai didi

qt - QCompleter 自定义完成规则

转载 作者:太空狗 更新时间:2023-10-29 23:16:58 26 4
gpt4 key购买 nike

我正在使用 Qt4.6,并且我有一个带有 QCompleter 的 QComboBox。

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

chicken soup
chilli peppers
grilled chicken

输入 ch 将匹配 chicken soupchilli peppers 但不是 grilled chicken

我想要的是能够输入 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/21133906/

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