https://doc.qt.io/qt-5/linguist-manager.html#using-lupdate is very focused on .pro files and doesn't mention Qt Quick. As this is one of the first pages that users wanting to learn how to set up translations will read, it should provide examples of using lupdate with non-.pro-based projects and Qt Quick projects. This is especially important for people using non-qmake build systems (CMake, Qbs).
To process an individual QML file:
Thanks to this answer, I discovered that you can even pass in a .qrc file and have all of its QML files picked up automatically by lupdate:
https://doc.qt.io/qt-5/qtqml-qml-i18n-example.html explains how to run lupdate on a QML file, so that would be good to link to.
If your app's user-facing strings lie mostly in QML files, but you have some in C++:
For lupdate to work successfully, it must know which translation files to produce. The files are listed in the application's .pro Qt project file.
This is a bit misleading. It should be updated to mention that it's also possible to specify the translation files via the command line without the need for a .pro file. For example, to generate .ts files that will be used for English and French:
The same applies to lrelease:
There should be examples of running it without a .pro file.