I'd like to know how to update and render game objects when using Qt. E.g. with a typical game you'd have an event loop, but Qt just has exec()
. What is the correct way to update and render game objects using Qt? How do I do things like get the time between each frame to update my game objects? Do I use a separate thread for all of this?
My question is quite similar to this thread, except I'm not trying to avoid standard Qt processes.
Edit: I apologise for the incomplete question. I believe tmpearce has already answered my question, but here's a basic example of what I'm trying to do in case anyone else has the same issue:
int main(int argv, char **args)
{
QApplication app(argv, args);
ApplicationWindow window;
window.show();
// How and where do I update my Game object?
return app.exec();
}
class Game
{
public:
void timeUpdate()
{
// Update game entities, etc. Should be called every frame.
}
void render()
{
// Renders game entities - where should I render to?
// Should be called 30 times a second, etc.
}
};
Cheers.
Qt has an event loop; it is started by QApplication::exec()
. I have no idea what your requirements are as far as updating and rendering; but since you seem to want an event loop like in a "typical game", I'll assume you can take it from there.
In your application, create a QTimer
. Connect it's timeout
signal to a slot you want to call on each event loop. Call QTimer::start(0)
: this will trigger the timeout
signal each time through the event loop.
As far as timing goes, check out QElapsedTimer - I suspect it is what you're looking for.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With