为什么在editFinished之前调用returnPressed?我可以重新排序吗?

时间:2016-01-21 22:30:25

标签: qt qlineedit

我使用editingFinished信号来验证/更正/缓存某些值。按下按钮时,我希望字段中的值正确。

现在为了让我的工作更快,我连接returnPressed来调用按下按钮会调用的内容。我期望的行为是:

    发出
  • editingFinished,因此应用程序知道该字段已编辑
  • returnPressed被释放,以解除"表格"的行动

但是,我发现连接到returnPressed的插槽实际上是先处理过的。

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

2 个答案:

答案 0 :(得分:0)

  

为什么这样的行为?

回答这一点可能是猜想,但它符合我的期望。 editingFinished听起来像是最后的电话。

  

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

似乎不是explicitly specified,但editingFinished之后returnPressed的描述可以作为提示。

  

在前一种情况下,我可以更改订单吗?

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

答案 1 :(得分:0)

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

Here我们可以看到,QWidgetLineControl负责returnPressededitingFinished信号:

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

正如here所示,accepted之前会发出editingFinished

emit accepted();
emit editingFinished();