【发布时间】:2010-12-25 22:29:36
【问题描述】:
我有一个带有 QCompleter 的 QLineEdit。我想要一个插槽 myslot() 在发出信号 QCompleter::activated(const QString) 或 QLineEdit::returnPressed() 时调用。
另外,如果用户使用 QCompleter 输入数据,我希望在完成后直接调用此插槽(即,如果用户已经单击 QCompleter,我不希望用户必须按 Enter) .
如果用户不使用完成程序,或者使用鼠标单击完成程序,这将正常工作。但是,如果他在 QCompleter 的弹出窗口中使用 enter 键,则两个信号都会发出,并且 myslot() 会被调用两次。
如何让它在任何情况下都只被调用一次?
【问题讨论】:
-
那么你只是不连接到 QLineEdit::returnPressed() 信号。
-
那行不通,因为如果用户不使用 QCompleter,则不会发出任何内容。
-
您是否尝试过连接到 QLineEdit::editingFinished() (并且只有那个)是否符合您的要求?连接到完成者似乎是错误的(这只是用户更改文本的另一种方式)。
-
@Frank Osterfeld :是的,但是,如果用户只点击 QCompleter 弹出窗口,它不会发送(他必须然后按 Enter,这是不必要的)。是的,这对我来说似乎也是错误的,但我不知道有任何其他方法可以实现我想要的。
标签: c++ qt signals-slots