The key to understanding is: there is generally no such thing as "multiple command line arguments" on Windows. The command line is passed as a single string to the receiving application. On Unices, the command line is passed as multiple arguments, so it's saner there.
The rest of this discussion is about Windows.
The splitting of commandline into strings is up to the C runtime library of the application that you pass the arguments to. This behavior is not standardized. You need to refer to the documentation of the relevant C runtime to figure out how it does the trick. Yes, it's that bad.
Are there some programs that cannot be opened with Qt?
Not at all. All that you need to know is that before starting the process, Qt is joining the argument list with a space separator. If an argument contains spaces and does not begin with nor end with '"'
, it will be enclosed in '"'
. If an argument contains '"'
, they are escaped. This is done in qprocess_win.cpp, qt_create_commandline()
. This is done to be compatible with MSVC runtime. An application may of course prefer to do things in its own way, and, for example, not use msvcrt at all.