Qt拥有UI的主循环,因为需要QApplication :: exec来获取用户输入(并正确显示窗口,例如通过QOpenGLWidget)。但是,我不想将QTimer用于我的主循环,而是使用更复杂的循环(例如Gaffer on Games的循环)。问题在于,由于QApplication拥有主循环,因此我编写的任何循环都将阻止应用程序执行任何操作。
这样,我想避免调用QApplication :: exec,而是自己轮询输入。我该怎么做?还是有其他方法可以使我自己的代码拥有主循环?
代码结构: 主要:
QApplication app(argc,argv);
QSurfaceFormat::setDefaultFormat(format);
MainUI ui; // MainUI extends QMainWindow
ui.show();
return app.exec();
MainUI拥有另一个扩展OpenGLContext的类的所有权,该类继承了传统的paintGL(),update()等。我向其中添加了一个函数startLoop,它启动了我的(准无限)循环。