我做了一个QLineEdit
用于阅读中缀数学表达式。运算符仅限于+-*/
和括号。值可以是数字或表示数值的变量名称。我想自动完成变量名。
问题是,显然简单QComplete
只适用于单个预定义的单词/短语。它们在其他词之间不起作用(正如您在修改表达式时可能期望的那样)。
我尝试阅读 Tree Model Completer,但由于我使用 Python 编程,这对我来说并没有太大帮助。有人知道用 python 编码的简单树模型完成器示例吗?
我做了一个QLineEdit
用于阅读中缀数学表达式。运算符仅限于+-*/
和括号。值可以是数字或表示数值的变量名称。我想自动完成变量名。
问题是,显然简单QComplete
只适用于单个预定义的单词/短语。它们在其他词之间不起作用(正如您在修改表达式时可能期望的那样)。
我尝试阅读 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”继续。例如,它看起来像:
每次更改编辑字段的文本时,所有工作都会被调用两次(?splitPath(path)
)。QCompleter
在对文本进行一些处理之后,应该使用包含一个或多个提案的简单字符串列表来设置新模型。似乎每次都必须重新设置模型。另请参阅QCompleter 自定义完成规则。
这还不是完整的公式解析和变量名完成,而是朝着这个方向迈出的合理一步。它只是解释了如何QCompleter
用于该目标。总结一下:子类化QCompleter
并将所有自定义逻辑放入splitpath()
.