2016-01-21 90 views
2

我使用editingFinished信号来验证/更正/缓存某个值。当按下按钮时,我期望字段中的值是正确的。为什么在编辑完成前调用returnPressed?我可以重新订购吗?

现在为了让我的工作更快,我连接了returnPressed来调用按钮按下的功能。我期望的行为是这样的:

  • editingFinished发出,因此应用程序知道字段编辑
  • returnPressed发出,到断火“形式”的行动

然而,我看到连接到returnPressed的插槽实际上是先处理的。

现在,我知道我可以将returnPressed连接到另一个插槽,先调用editingFinished插槽,然后执行该操作,以解决此问题,但我的问题是,为什么这样的行为?或者是订单没有具体说明,而且恰好按照我的顺序?在前一种情况下,我可以更改订单吗?

回答

0

为什么这样的行为?

回答这个问题是猜想,但它符合我的预期。听起来像是最后的呼唤。

或者是订单是未指定的,它恰好是按照这个顺序对我?

这似乎不是explicitly specified,不过这对于editingFinished描述来后returnPressed可以是暗示的事实。

在前一种情况下,我可以更改顺序吗?

不是没有改变源代码和重新编译。只需切换连接。

0

顺序来自信号发出的顺序。直接连接的插槽就像普通函数调用一样工作。通过Qt的源代码,挖我能找到这样的:

Here我们可以看到,QWidgetLineControl分管returnPressededitingFinished信号:

QObject::connect(control, SIGNAL(accepted()), 
    q, SIGNAL(returnPressed())); 
QObject::connect(control, SIGNAL(editingFinished()), 
    q, SIGNAL(editingFinished())); 

正如所见hereaccepted之前发出editingFinished

emit accepted(); 
emit editingFinished(); 
相关问题