长话短说,我已经拥有了我需要在列表中显示的内容(对于qlineedit)。但是我需要在自动完成框中显示一些额外的信息,因为我使用它的setModel方法来更新它显示的内容,因此混乱了QCompleter(所以我放入setModel方法的其他信息会因完成而混乱QCompleter的规则)所以我需要在QLineEdit下面显示类似QCompleter的显示。无论如何我能做到这一点吗?
#The method TopProducts(text) -> returns a list of strings with the format
#"manufacturer - model number - description" (picks three products based on the given text)
#in __init__ somewhere:
self.nameEdit = QLineEdit()
self.completer = QCompleter()
self.nameEdit.setCompleter(self.completer)
self.nameEdit.textEdited.connect(self.suggest)
self.model = QStringListModel()
def suggest(self,text):
stringList = TopProducts(text)
self.model.setStringList(stringList)
self.completer.setModel(self.model)
答案 0 :(得分:0)
合适的解决方案是创建一个自定义模型,其中包含每个制造商,型号和说明的角色,因此您可以使用completionRole
的{{1}}属性,并仅按型号过滤它。 / p>
默认情况下会显示所选的角色文字,因此我们没有这种不恰当的行为,我们会覆盖QCompleter
以返回pathFromIndex()
角色:
Qt::DisplayRole