可以在不使用QCompleter的情况下获得类似QCompleter的外观?

时间:2018-01-18 20:46:15

标签: python pyqt pyqt4 pyqt5 qcompleter

长话短说,我已经拥有了我需要在列表中显示的内容(对于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)

1 个答案:

答案 0 :(得分:0)

合适的解决方案是创建一个自定义模型,其中包含每个制造商,型号和说明的角色,因此您可以使用completionRole的{​​{1}}属性,并仅按型号过滤它。 / p>

默认情况下会显示所选的角色文字,因此我们没有这种不恰当的行为,我们会覆盖QCompleter以返回pathFromIndex()角色:

Qt::DisplayRole