我想让QCompleter匹配几个用逗号分隔的等价选项。看起来有没有简单的方法来做到这一点,但一行QCompleter引用引起了我的注意,描述函数QCompleter :: splitPath:“当与列表模型一起使用时,返回列表中的第一项用于匹配。”这可以用我需要的方式 - 分割输入字符串并将其返回,以便未完成的最后一项是列表中的第一项?我没有设法使其工作,但我可能做错了什么。Qt QCompleter多个匹配
4
A
回答
1
根据我对您的问题和文档的理解,您可以用逗号分隔用户输入的字符串,并让您的完成者在您的模型中检查完成。
但是,在每个逗号之后,模型的索引(像它的二维数组字符串)将会增加。
例如,如果您有以下输入:
ABCD,EFGH,IJ
,你想完成者完成IJ KL,你就必须有一个模型,它是至少3个索引宽,因为第一个文本(ABCD)将与第一列中的字符串一起完成,EFGH将与您的模型的第二列一起完成等。
因此,我不知道它是否可以在你的应用程序中使用。
祝你好运。
4
这是另一种做法,我认为更符合原始问题。不需要复杂的数据模型,而是使用简单的QStringListModel。
import sys
from PyQt4 import QtCore, QtGui
class test(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
model = QtGui.QStringListModel()
wordList = ['John Doe','Jane Doe','Albert Einstein', 'Alfred E Newman']
model.setStringList(wordList)
layout = QtGui.QVBoxLayout(self)
self.line = QtGui.QLineEdit(self)
layout.addWidget(self.line)
complete = CustomCompleter(self)
complete.setModel(model)
complete.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
complete.setCompletionMode(0)
complete.setWrapAround(False)
self.line.setCompleter(complete)
class CustomCompleter(QtGui.QCompleter):
def __init__(self, parent=None):
QtGui.QCompleter.__init__(self, parent)
def pathFromIndex(self, index):
path = QtGui.QCompleter.pathFromIndex(self, index)
lst = str(self.widget().text()).split(',')
if len(lst) > 1:
path = '%s, %s' % (','.join(lst[:-1]), path)
return path
def splitPath(self, path):
path = str(path.split(',')[-1]).lstrip(' ')
return [path]
#===============================================================================
# Unit Testing
#===============================================================================
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = test()
window.show()
sys.exit(app.exec_())
0
支持成员DELIMITERS中所有分隔符的通用多重完成代码可以在下面的代码片段中找到。看起来很简单,但由于pyQt方面的文档非常糟糕,因此非常烦人。
class CustomCompleter(QtGui.QCompleter):
DELIMITERS = r'[()\[\]*+-=/\\]'
def __init__(self, parent=None):
QtGui.QCompleter.__init__(self, parent)
def pathFromIndex(self, index):
path = QtGui.QCompleter.pathFromIndex(self, index)
string = self.widget().text()
split = re.split(self.DELIMITERS, string)[-1]
if len(split)==len(string):
string_without_split = ''
else:
if len(split)>0:
string_without_split = string[:-len(split)]
else:
string_without_split = string
return string_without_split+path
def splitPath(self, path):
split = re.split(self.DELIMITERS, path)[-1]
return [split]
相关问题
- 1. AWK匹配()多个匹配
- 2. 多个匹配
- 3. 用于多个单词的QCompleter和QLineEdit
- 4. 多个regEx匹配
- 5. 多个类匹配
- 6. 匹配多个值
- 7. 的preg_match匹配多个匹配
- 8. Elasticsearch与cutoff_frequency匹配多个匹配
- 9. 与多个匹配匹配的模式
- 10. QT Creator _ITERATOR_DEBUG_LEVEL不匹配
- 11. mysql匹配多个和的和或的
- 12. VLOOKUP有多个匹配
- 13. Excel的多个列匹配
- 14. 的SQLite有多个匹配
- 15. MySQL链多个“匹配”
- 16. 匹配多个字符串
- 17. jquery查找多个匹配
- 18. 匹配多个字符串
- 19. 每行多个匹配
- 20. 多个XML feed,sql匹配
- 21. Neo4j匹配多个标签
- 22. jQuery的匹配多个类
- 23. SQL匹配多个行
- 24. 匹配多个列表
- 25. 匹配多个属性
- 26. jQuery匹配多个属性
- 27. 跨多个表匹配值
- 28. VLOOKUP返回多个匹配
- 29. QCompleter双重输入
- 30. Django多对多匹配多个条件
澄清:用户输入的字符串是否用逗号分隔? – Live 2010-09-23 15:21:34