QLineEdit 上的 QCompleter 用于部分插入的文本

QCompleter on QLineEdit for parts of the inserted text

我做了一个 QLineEdit 用于阅读中缀数学表达式。运算符仅限于 +-*/ 和括号。值可以是数字或表示数值的变量名。我想自动完成变量名。

问题是看似简单的 QComplete 仅适用于单个预定义 words/phrases。它们在其他词之间不起作用(正如您在修改表达式时可能期望的那样)。

我尝试阅读 Tree Model Completer,但由于我是在 Python 中编程,所以这对我帮助不大。有谁知道 python 中编码的简单树模型完成器示例?

阅读 ekhumoros 后 我决定为自定义完成器制作一个简短示例。

示例如下:

from PySide import QtGui

class CustomCompleter(QtGui.QCompleter):

    def __init__(self):
        super().__init__()

    def splitPath(self, path):
        if path.endswith('ha'):
            self.setModel(QtGui.QStringListModel([path + 'llo']))
        return [path]

app = QtGui.QApplication([])

e = QtGui.QLineEdit()
c = CustomCompleter()
e.setCompleter(c)
e.show()

app.exec_()

每次文本以 'ha' 结尾时,它建议以 'llo' 继续它。它看起来像:

所有工作都在 QCompletersplitPath(path) 中完成,每次我更改编辑字段的文本时都会调用两次(?)。在对文本进行一些处理之后,应该使用包含一个或多个建议的简单字符串列表来设置新模型。似乎每次都必须重新设置模型。另见 QCompleter Custom Completion Rules

这还不是完整的公式解析和变量名完成,但是朝着这个方向迈出了合理的一步。它只是解释了 QCompleter 如何用于该目标。总结一下:子类 QCompleter 并将所有自定义逻辑放入 splitpath().