How can I modify the QGroundControl UI and backend for custom features?

I’m working on customizing QGroundControl to better suit our specific drone operations. I would like to understand how to start modifying both the UI (QML) and the C++ backend logic.
Can anyone guide me on the recommended approach or share documentation/resources for:

  • Building QGC from source
  • Editing the QML-based UI
  • Integrating custom logic in the backend
  • Best practices for maintaining compatibility with updates

Any advice or example references would be really helpful!