我有一个带有QCompleter的QLineEdit。我希望在发出信号QCompleter::activated(const QString)或QLineEdit::returnPressed()时调用插槽myslot()。
另外,如果用户使用QCompleter输入数据,我希望在完成后立即调用此插槽(即,我不希望用户已经单击QCompleter则必须按Enter)。
如果用户不使用完成器,或者使用鼠标单击完成器,则此方法效果很好。但是,如果他在QCompleter的弹出窗口上使用enter键,则两个信号均被发射,并且myslot()被调用两次。
无论如何,如何使它仅被调用一次?
最佳答案
我建议为QCompleter创建一个包装器类,在其中重新实现eventFilter()。包装类可以仅在单击鼠标时发出信号,也可以吃回车按下事件。清晰的文档可以在Qt手册中找到。在线拷贝在这里:http://doc.qt.io/archives/4.6/qobject.html#eventFilter
还有其他方法,但是这是相当困难的。