我正在尝试使用XLib捕获按键事件。但是由于某些原因,XNextEvent无法正常工作。
我没有收到任何错误,但看起来我的程序陷在“XNextEvent”调用行中。
这是我的代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

using namespace std;


int main()
{
    XEvent event;
    KeySym key;
    char text[255];
    Display *dis;

    dis = XOpenDisplay(NULL);
    while (1) {
        XNextEvent(dis, &event);
        if (event.type==KeyPress && XLookupString(&event.xkey,text,255,&key,0) == 1) {
            if (text[0]=='q') {
                XCloseDisplay(dis);
                return 0;
            }
            printf("You pressed the %c key!\n", text[0]);
        }
    }
    return 0;
}

最佳答案

这不是X11窗口系统的工作方式。

仔细阅读this。关键是:



您没有创建窗口,因此您的程序不会收到键盘事件。即使您创建了窗口,它也必须具有焦点:

关于c++ - XNextEvent由于某些原因不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22222061/

10-10 12:36