【发布时间】:2016-10-17 15:37:01
【问题描述】:
我有一个 QLineEdit 和一个处理 textEdited 信号的插槽。
我不想验证文本,只需使用它来过滤名称列表(不同的小部件),其中包含与 QLineEdit 中的文本匹配的名称。
我发现QLineEdit中显示的文本只有在信号处理后才会更新,问题是:我可以让新的文本先在QLineEdit中显示,然后再处理信号吗?
现在我有:
1. let's say user presses 'A' key in the QLineEdit
2. textEdited signal is emitted (but QLineEdit is not visually updated yet)
3. signal is processed in my slot (filtering a QListWidget)
4. QLineEdit is updated, showing the effect of pressing the key 'A'
如果第 3 步需要很长时间,那么在按下键和显示在 QLineEdit 之间的延迟太长,所以我想要:
1. let's say user presses 'A' key in the QLineEdit
2. textEdited signal is emitted (but QLineEdit is not updated yet)
3. signal is processed in my slot (filtering a QListWidget)
i) update the QLineEdit object to reflect the pressed key 'A'
ii) filter the QListWidget
我该怎么做?我需要类似 QLineEdit.refresh() 方法的东西吗?正如我所说,我不需要验证 de text,我只想用它来过滤 QListWidget 的内容,所以我希望用户编辑的所有内容都能尽快显示出来。
编辑:我发现 QCoreApplication.processEvents() 可以完成工作,但是它会影响信号的处理过程,并且某些按下的键不会触发信号,尽管我不明白为什么。似乎如果用户说按两个键“太快”编辑 QLineEdit,那么我的插槽中对 processEvents() 的调用(在处理第一个键时)会处理第二个键,因此我的插槽不会处理第二个键。有意义吗?
【问题讨论】: