4

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

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

我尝试阅读 Tree Model Completer,但由于我使用 Python 编程,这对我来说并没有太大帮助。有人知道用 python 编码的简单树模型完成器示例吗?

4

1 回答 1

3

在阅读了 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”继续。例如,它看起来像:

在此处输入图像描述

每次更改编辑字段的文本时,所有工作都会被调用两次(?splitPath(path))。QCompleter在对文本进行一些处理之后,应该使用包含一个或多个提案的简单字符串列表来设置新模型。似乎每次都必须重新设置模型。另请参阅QCompleter 自定义完成规则

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

于 2015-02-02T20:39:29.670 回答