Cómo crear una aplicación de E / S en Qt en Linux

En Linux, un programa emite los resultados de printf y rutinas similares al descriptor de archivo de salida estándar , que cuando el programa se ejecuta en una ventana de terminal es el terminal mismo (en realidad, el dispositivo pseudo-terminal utilizado, configurado y administrado por El programa terminal). Eso es lo que ves en la última imagen.

Pero cuando el programa se ejecuta bajo el control de un GUI / Desktop Manager (como se hace en la segunda imagen), la salida no aparece en la pantalla / escritorio sino en la salida estándar (como siempre), que esta vez es el archivo de registro asociado con el servidor X-11 (generalmente “.xsession-errors” en el directorio de inicio). Busque su salida en algún lugar cerca del final de ese archivo, o ejecute un “tail -f ~ / .xsession-errors” en una ventana de terminal para ver lo que se está escribiendo en ese archivo de registro en tiempo real, esté listo para mucho mensajes de vez en cuando.

Cuando “activa esa casilla de verificación” esencialmente le está diciendo al administrador de archivos subyacente que su ejecutable está destinado a ejecutarse desde un terminal, y creará y abrirá una ventana de terminal para ejecutar su programa. Pero, y esto es un gran “Pero”: la ventana de terminal se cerrará inmediatamente después de que el programa salga, lo que en su caso es casi inmediato. Con una computadora rápida y una tarjeta gráfica rápida, puede aparecer como un parpadeo rápido. (En mi propio escritorio bastante antiguo es notable, pero casi imposible de leer).

En algunos administradores de escritorio, es posible no solo hacer clic en la casilla de verificación “Ejecutar en terminal”, sino que hay otra (a veces en “Opciones avanzadas”) que dice “No cerrar cuando el comando sale”, que es exactamente lo que desea en Para ver la salida de su código. Cuando haya terminado de leer su ventana de terminal, o incluso copiar y pegar la salida en otro lugar, simplemente cierre esa ventana y todo desaparecerá.

¿Por qué su código parece funcionar cuando está depurando? Supongo que el sistema de depuración toma el control y le solicita los comandos que debe hacer antes de cerrar su programa. Tenga en cuenta que en este caso es el programa de depuración el que está “manteniendo abierta” la ventana del terminal, y al finalizar el depurador cerrará (por supuesto) la ventana del terminal.

Si por alguna razón no puede habilitar la opción “No cerrar cuando el comando sale”, siempre puede agregar un comando de pausa al final de su código. Por ejemplo, agregue ” sleep(3600); “Justo antes de” return 0; “Y su programa se detendrá durante una hora antes de cerrar la ventana del terminal. (Supongo que una hora es suficiente para sus propósitos.) Siempre puede “ ^C ” salir en cualquier momento antes de que finalice la llamada sleep() .

No hay nada malo con tu código. Escribiste un programa TUI y funcionó bien, simplemente no viste el resultado. El IDE invocó un shell para ejecutar su programa. El shell ejecutó su código, mostró la salida y el proceso finalizó con éxito, por lo que la ventana del shell se cerró antes de que viera el resultado, pero estaba allí.

Cuando ejecutó el binario desde una ventana de shell que abrió manualmente, hizo lo mismo. Simplemente no se suicidó y te esperó, por lo que lograste ver la salida.

Cuando hace doble clic en su binario en el administrador de archivos, también invoca un shell y su programa se ejecuta con éxito, simplemente no puede ver la salida ya que la ventana del shell se cierra inmediatamente después de que finaliza la ejecución.

// main.cpp
#include

int main (int argc, char * argv [])
{
QCoreApplication a (argc, argv);

qDebug () << "moo?";

devuelve a.exec ();
}

Y esta es la configuración del proyecto de QtCreator (pero probablemente necesite más cosas):

QT + = núcleo
QT – = gui

CONFIG + = c ++ 11
CONFIG + = consola
CONFIG – = app_bundle

TARGET = ConsoleApp
PLANTILLA = aplicación
FUENTES + = main.cpp

Probablemente deberías obtener QtCreator (El IDE) …

Tu pregunta es incorrecta. Para crear una aplicación IO, utiliza IODevice Class. QIODevice Class | Qt 4.8

Lo que probablemente quería preguntar es cómo crear una aplicación de terminal, una aplicación de línea de comandos, una aplicación TUI (en lugar de una GUI).

Todo lo que está haciendo es correcto, sin embargo, probablemente instaló QT y Qt Creator form Qt. Para que todo funcione bien la primera vez, es mejor si instala bibliotecas Qt y Qt Creator para los repositorios rw de su propia distribución de Linux.