我使用editingFinished
信号来验证/更正/缓存某些值。按下按钮时,我希望字段中的值正确。
现在为了让我的工作更快,我连接returnPressed
来调用按下按钮会调用的内容。我期望的行为是:
editingFinished
,因此应用程序知道该字段已编辑returnPressed
被释放,以解除"表格"的行动但是,我发现连接到returnPressed
的插槽实际上是先处理过的。
现在,我知道我可以将returnPressed
连接到另一个首先调用editingFinished
插槽的插槽,然后执行操作,以解决此问题,但我的问题是,为什么行为像这样?或者说订单是未指定的,它恰好是按照这个顺序给我的?在前一种情况下,我可以更改订单吗?
答案 0 :(得分:0)
为什么这样的行为?
回答这一点可能是猜想,但它符合我的期望。 editingFinished
听起来像是最后的电话。
或者说订单是未指定的,它恰好是按照这个顺序给我的?
似乎不是explicitly specified,但editingFinished
之后returnPressed
的描述可以作为提示。
在前一种情况下,我可以更改订单吗?
不是不改变源代码和重新编译。只需切换连接即可。
答案 1 :(得分:0)
顺序来自发出信号的顺序。直接连接的插槽就像普通的函数调用一样。通过Qt源代码我可以找到这个:
Here我们可以看到,QWidgetLineControl
负责returnPressed
和editingFinished
信号:
QObject::connect(control, SIGNAL(accepted()),
q, SIGNAL(returnPressed()));
QObject::connect(control, SIGNAL(editingFinished()),
q, SIGNAL(editingFinished()));
正如here所示,accepted
之前会发出editingFinished
。
emit accepted();
emit editingFinished();