Qt 或任何其他语言。事件循环

Qt or any other lang. Event Loop

我是Qt平台的c++程序员。

我想知道,事件如何循环"knows" 向哪个小部件发送事件,主要是mouse/keyboard 事件? 它是根据鼠标坐标和 z 顺序完成的吗? 来自键盘的事件呢?

谢谢

事件循环不知道。这是在其他代码位中完成的。

您正在使用键盘查找的字词是 "focus"。在系统范围内只有一个 window 具有焦点(或者在多用户系统上每个键盘至少有一个 window)。 OS 将击键传递给 window。 Qt 只是从本机 window 句柄中找到 Qt 对象。同样,鼠标点击主要由 OS 处理。

不知道。

当您想要捕获一个事件时,您必须创建一个事件过滤器来捕获该事件,或者允许它向下传递。

这是我不久前创建的一个非常简单的事件过滤器:

bool OGL_widget::eventFilter(QObject *obj, QEvent *event) {
    switch (event->type()) {
    case QEvent::KeyRelease:
    case QEvent::KeyPress: {
        QKeyEvent *key = static_cast<QKeyEvent*> (event);
        if (!key->isAutoRepeat())
            key_event_queue << *key;
    }
    break;
    case 1001:
    case 1002: {
        Savestate_event *save = static_cast<Savestate_event*> (event);
            save_event_queue << *save;
    }
    break;
    }

    return QObject::eventFilter(obj, event);
}

在 Qt 文档中查看 events 这篇写得很好的文章。