【问题标题】:Default priority of events in QtQt 中事件的默认优先级
【发布时间】:2019-06-06 07:35:46
【问题描述】:

Qt 下事件的默认优先级是多少?它们是否都具有相同的优先级(哪个?),还是其中一些比其他的更平等?根据文档,“作为一种特殊情况,超时为 0 的 QTimer 将在窗口系统事件队列中的所有事件都被处理后立即超时。”这是否只是意味着具有零超时的 Qtimer 会产生具有最低优先级的事件?那么非零超时呢?

【问题讨论】:

  • 什么是事件优先级?顺序取决于发生了什么。如果我点击一个按钮,当然,它会首先获得鼠标点击事件,而不是按键事件。如果我单击然后按一个键,顺序将是相同的。
  • 请注意,事件的优先级是在对QCoreApplication::postEvent 的调用中指定的,而不是QEvent 类型本身的固有部分。因此,同一类型的两个事件可能具有不同的优先级。

标签: qt events


【解决方案1】:

QTimer 超时为零根本不是计时器。这是一个误称。拥有这样的计时器没有任何意义,因此它被重载为一个特殊的构造,允许您在事件队列为空时执行一些代码。它与任何计时器处理代码完全没有任何关系,并且在 Qt 内部作为特殊情况进行处理。

默认情况下,Qt 自身产生的所有事件都在默认优先级零 (0) 下发布,除了编辑 Qt 代码之外没有其他方法可以更改它(这里没有理由这样做)。事件优先级的概念仅在您自己发布事件时才重要,然后您实际上只有两个选择:Qt::HighEventPriority,或任何高于零的优先级,意味着您的事件将发布在 Qt 本身发布的事件之前.相反,Qt::LowEventPriority 或任何低于零的优先级意味着您的事件将发布在 Qt 本身发布的所有事件之后。

当然,您自己的事件的相对优先级很重要,例如您自己的优先级为 2 的事件将排在您自己的优先级为 1 的事件之前。但 Qt 自己的事件的优先级仅为 0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    相关资源
    最近更新 更多