what you want to achieve is better known as a *Superbuild* in the CMake world. You have several options here, but the most basic one is probably the following:
You setup another repository which only builds all the external dependencies (such as Qt) and put them in a predefined place. In your actual project you could refer to those prebuilt libraries using the CMAKE_PREFIX_PATH variable, which should point to the install directory from your external build. This way all the external stuff will only be build once (probably via CI) and all your developers don't need to build all the dependencies themselves.
Regarding the external package introspection. You could use find_package() to check, if the correct version of your external library has been found on the system and just use it. In any other case you check for the _NOTFOUND variable and set it up locally, with the installation target pointing to the CMAKE_PREFIX_PATH as mentioned above.
On a personal note, I would not use such a build system layout myself, as it quickly becomes unclear from where a dependency is coming from and if the dependency has all the required flags and settings as needed for the software project. So you might want to reconsider a more cleaner layout. For inspiration you may have a look at the CMake configuration of the OpenChemistry project .