@mingvv
First, you should understand the basics of C++ and object-oriented programming in general. Without it's really hard to get a satisfying result and you will spend most of your time looking for things or trying to figure out how things work (or why they don't).
Qt also has Model-View based classes.
https://doc.qt.io/qt-5/model-view-programming.html
You can communicate with your GUI or other QObject classes using the Qt signal&slot system or using events.
For example if you press a button, you will emit the clicked signal. Then, if you connect a slot (= function) to this signal, the function will be called to perform some actions.
https://doc.qt.io/qt-5/signalsandslots.html
A (simple) snake game in Qt might be a practice to start with. Think about what classes / structure you will need, design your GUI and start writing your code :)
Might be helpful:
https://doc.qt.io/qt-5/graphicsview.html
According the "GUI Code vs Designer" thing:
It's mostly a mix of both. Some things just can't be done using the QtDesigner, but it helps a lot creating your basic widgets and your basic design.