当我同时使用我自己的QCompleter和QAbstractItemModel时,我在PySide中看到了一个奇怪的行为,我在PySide(或Qt)中找不到解释它所做事情的文档。你知道吗
当我有一个使用QCompleter的编辑框,并且输入额外的字符时,会有大量的调用^{
由于我的数据模型中有成百上千的顶级项,我有点担心我做错了什么。我只想确保我的电脑不会因为不相关的计算而陷入困境。你知道吗
我在这里创建了一个示例:https://gist.github.com/jason-s/6c9495e29a4caac7ddf5cd739550a310 我基于my earlier example in another question
如果我将它作为python qtcompleter5.py -e 25
运行并在编辑框中键入United States/Arizona/P
,我在控制台中看到的内容如下所示。(Miragi012stan
项是有意的,通过改变-e
参数可以很容易地改变顶级项计数。)
splitPath: [u'United States', u'Arizona', u'P']
Canada
France
Germany
United States
Mexico
Miragi000stan
Miragi001stan
Miragi002stan
Miragi003stan
Miragi004stan
Miragi005stan
Miragi006stan
Miragi007stan
Miragi008stan
Miragi009stan
Miragi010stan
Miragi011stan
Miragi012stan
Miragi013stan
Miragi014stan
Miragi015stan
Miragi016stan
Miragi017stan
Miragi018stan
Miragi019stan
Miragi020stan
Miragi021stan
Miragi022stan
Miragi023stan
Miragi024stan
Peoria
Peoria
Phoenix
Peoria
Peoria
Peoria
Peoria
Phoenix
Phoenix
在我看来,对所有顶级项调用.data()
,然后对可能与完成窗口中的文本匹配的实际项调用3-6次。你知道吗
它唯一一次不这样做是在我输入顶级项时,例如Unite
,它会产生以下调用:
splitPath: [u'Unite']
United States
United States
United States
splitPath: [u'Unite']
United States
United States
United States
United States
United States
(顺便说一句,我可以注释掉TreeView的内容,只留下QLineEdit,所以TreeView不是导致问题的部分。)
即使我试图通过告诉PySide我正在使用排序模型(参见qtcompleter5a.py)和使用^{
这是怎么回事?你知道吗
嗯。。。我不知道这是不是一个好主意,但是如果我把所有顶级节点放在一个虚拟节点下,那么在完成过程中只有虚拟节点得到一个“无用”的查询。你知道吗
见https://gist.github.com/jason-s/6c9495e29a4caac7ddf5cd739550a310#file-qtcompleter5b-py
我对qtcompleter5.py所做的更改:
""
中完成列的内容DisplayRole
pathFromIndex()
的第一个组件将被忽略rowCount()
为无效的父级返回1parent()
在提供的索引位于根目录时返回无效的QtCore.QModelIndex()
(以前是在索引的父目录位于根目录时)index()
在提供的父项无效时返回根项(以前它查找根项的适当子项)这使得这个模型的树视图看起来有点滑稽,但是对于不需要树视图的应用程序,它似乎可以工作;如果我输入
United States/Arizona/P
,那么它会打印:相关问题 更多 >
编程相关推荐