Qt或任何其他郎。事件循环

时间:2015-01-29 19:26:57

标签: c++ qt event-loop qeventloop

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

我想知道,事件如何循环"知道"哪个小部件发送一个事件,主要是鼠标/键盘事件? 它是基于鼠标坐标和z顺序完成的吗? 键盘上的事件怎么样?

由于

2 个答案:

答案 0 :(得分:3)

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

您使用键盘寻找的术语是"焦点"。在整个系统范围内(或多用户系统上每个键盘至少有一个窗口),一个窗口正好具有焦点。操作系统将按键发送到该窗口。 Qt只是从本机窗口句柄中找到Qt对象。同样,鼠标点击主要由操作系统处理。

答案 1 :(得分:0)

它不知道。

如果要捕获事件,则必须创建一个事件过滤器,用于捕获事件或允许传递事件。

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

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 docs上查看这篇写得很好的events文章。