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