我想讓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