【问题标题】:Why is returnPressed called before editingFinished? Can I reorder it?为什么在editingFinished之前调用returnPressed?我可以重新订购吗?
【发布时间】:2016-01-21 22:30:24
【问题描述】:

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

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

  • editingFinished 被发出,因此应用程序知道该字段已被编辑
  • 发出returnPressed,以触发“表单”的操作

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

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

【问题讨论】:

    标签: qt qlineedit


    【解决方案1】:

    为什么会有这样的行为?

    回答这个问题是猜想,但它符合我的期望。 editingFinished 听起来像是最后的电话。

    或者是顺序未指定,而我恰好是这个顺序?

    它似乎不是explicitly specified,但editingFinished 的描述出现在returnPressed 之后这一事实可以作为提示。

    如果是前一种情况,我可以更改顺序吗?

    不更改源代码并重新编译。只需切换连接即可。

    【讨论】:

      【解决方案2】:

      顺序来自信号发出的顺序。直接连接的插槽就像正常的函数调用一样工作。通过挖掘 Qt 源代码,我发现了这个:

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

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

      正如看到的hereacceptededitingFinished 之前发出。

      emit accepted();
      emit editingFinished();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-30
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多