我已经按照这个 tutorial 创建了一个小部件,我可以在其中使用 SDL 进行渲染,在教程结束时,作者提到应该可以在更新函数中使用“SDL_PollEvent”,所以我创建了这个具有以下内容的更新功能:
SDL_Event sdl_event;
while(SDL_PollEvent(&sdl_event))
{
switch(sdl_event.type){
case SDL_KEYDOWN:
LOG_CRITICAL("KeyDown");
break;
case SDL_KEYUP:
LOG_CRITICAL("KeyUp");
break;
default:
LOG_CRITICAL("Other Event");
break;
}
}
即使我单击或按住按钮,LOG_CRITICAL 也不会运行。是我做错了什么还是有另一种处理输入的方法?
我试过运行另一个线程来处理输入,但显然你只能在主线程中处理事件。
编辑: 当我将 SDL_PollEvent 更改为 SDL_WaitEvent 时,它开始工作。我的渲染是在不同的线程中完成的,因此渲染仍在进行中,但无法关闭或调整窗口大小(我假设 qt 的线程由于 SDL_WaitEvent 而被冻结)。
我也可以将 while (SDL_WaitEvent) 更改为 if (SDL_WaitEvent) 并且窗口只会在我单击按钮时冻结,但必须有一种“更好”的方法来做到这一点?