即时文本搜索/发出新信号时中断

时间:2014-04-20 12:13:27

标签: python qt pyqt signals

我使用来自textChanged的{​​{1}}信号在PyQt4中进行即时搜索。

搜索足够快,但更新QLineEdit结果有点慢(或者我编写的函数,它构建了输出字符串)。 无论如何,如果在一定时间内发布了新的QTextEdit信号,是否有一种延迟搜索或中断搜索的方法?目标是避免输入'挂起'以常见的打字速度在搜索字段中输入内容时。

或解决此问题的任何其他建议?也许没有线程..

基本上看起来像这样

textChanged

好的,这是我从Google示例中做出的,peakxu建议

class MyApp(..):

    def __init__(self):
        ....

        self.central.editSearch.textChanged.connect(self.search_instant)

    def search_instant(self, query):
        # skip strings with less than 3 chars
        if len(query) < 3:
            return
        self.search()

    def search(self)
        ... search in lots of strings ...
        self.central.myTextEdit.setText(result)
        # reimplemented function building the output

1 个答案:

答案 0 :(得分:2)

您可能需要考虑几种替代方案。

  1. 让搜索在线程中运行,必要时中断。请参阅https://qt-project.org/forums/viewthread/16109
  2. 阻止信号直到之前的搜索完成。 http://qt-project.org/doc/qt-4.8/qobject.html#blockSignals
  3. 围绕搜索功能编写自己的debounce包装器。
  4. 目前第一个选项听起来最好。

    更新: Qt Google Suggest example可能是一个有用的参考。他们使用QTimer跟踪用户输入之间的时间。