首页 文章

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

提问于
浏览
4

我做了 QLineEdit 来读取中缀数学表达式 . 运营商仅限于 +-*/ 和括号 . 值可以是数字或表示数值的变量名称 . 我想自动完成变量名称 .

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

我试过阅读Tree Model Completer,但是因为我用Python编程对我没有太大帮助 . 有谁知道在python中编码的简单树模型完成示例?

1 回答

  • 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'继续它 . 它看起来像:

    enter image description here

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

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

相关问题