È specifico del sistema operativo.
Su Linux con X11 , puoi semplicemente utilizzare il fatto che DISPLAY
è una variabile di ambiente non impostata al di fuori della grafica interfacce desktop (o test per il successo di XOpenDisplay
);
Potresti anche utilizzare isatty (3) su STDIN_FILENO
(che è 0) per verificare se stdin è un terminale (ma potresti anche aprire /dev/tty
e vedere se fallisce, cf tty(4) )
così semplicemente il codice
if (getenv("DISPLAY"))
startmyGUIapplication();
else if (isatty(STDIN_FILENO))
startmyterminalapplication();
else
error(); // application started outside, e.g. from 'crontab'
Riguardo Qt, suppongo che QApplication non possa essere costruito se non utilizzato in una GUI, Oppure la sua funzione exec fallirebbe.
PS. Su Linux con un desktop Wayland (o su MacOSX con quarzo ), non so come farlo, ma sono sicuro che esiste una soluzione semplice.