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 这篇写得很好的文章。
我是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 这篇写得很好的文章。