Ok, just had a quick look at the qmake sources.
It expects the user to provide the make spec either as a qmake option( -spec or -platform ) or in the QMAKESPEC environment variable. If it cannot find it this way, it takes the default, which is located in QTDIR/mkspecs/default. The problem is that in the opensource version this folder does not exist. In the version precompiled for mingw it exists and it is the same as win32-g++ and for the commercial versions is set according to the msvc version of the distribution.
If it cannot find it in the default directory error it displays an error message:
Qt Code:
  1. if(cmd & ReadConf) { // parse mkspec
  2. QString qmakespec = fixEnvVariables(Option::mkfile::qmakespec);
  3. QStringList mkspec_roots = qmake_mkspec_paths();
  4. debug_msg(2, "Looking for mkspec %s in (%s)", qmakespec.toLatin1().constData(),
  5. mkspec_roots.join("::").toLatin1().constData());
  6. if(qmakespec.isEmpty()) {
  7. for(QStringList::ConstIterator it = mkspec_roots.begin(); it != mkspec_roots.end(); ++it) {
  8. QString mkspec = (*it) + QDir::separator() + "default";
  9. QFileInfo default_info(mkspec);
  10. if(default_info.exists() && default_info.isDir()) {
  11. qmakespec = mkspec;
  12. break;
  13. }
  14. }
  15. if(qmakespec.isEmpty()) {
  16. fprintf(stderr, "QMAKESPEC has not been set, so configuration cannot be deduced.\n");
  17. return false;
  18. }
  19. Option::mkfile::qmakespec = qmakespec;
  20. }
To copy to clipboard, switch view to plain text mode 
So I think it is ok and enough to provide a dropdown or a list with all the makespecs available on windows and let the user choose from them

...and also there is a problem with switches changes between different versions
No problem whatsoever. VS also has the option to switch between different Qt installations, but it does it internally.
It is just a matter of setting the environment variables to the desired installation.