Introducción a Patrones de Diseño en C++ con Qt4/1.7 Diálogos Qt para entrada/salida de usuario

De Wikilibros, la colección de libros de texto de contenido libre.
Versión para imprimir esta pagina

Diálogos Qt para entrada/salida de usuario[editar]

El Ejemplo 1.6 muestra una reescritura de nuestro primer ejemplo en C++, usando diálogos en lugar de entradas/salidas estándar. Qt proporciona clases para reemplazar casi todas las clases en la librería estándar de C++. Aun podemos necesitar de ellos, en el caso de que estemos reusando código que use STL o iostreams en una aplicación Qt.

Este ejemplo hace uso de la clase de Qt QString, que es una implementación dinámica que soporta el estándar Unicode. QString contiene muchas funciones miembro útiles para convertir y dar formato a cadenas de maneras distintas.

Ejemplo 1.6[editar]

Ejemplo: Ejemplo 1.6. src/early-examples/example1/fac1.cpp

int main (int argc, char* argv[]) { Inicio de la función main que devuelve int.

QApplication app(argc, argv); Inicio de cada aplicación GUI de Qt.

QTextStream cout(stdout); Crea un QTextStream para salida estándar.

int respuesta = 0; Debe ser definida fuera del bucle do, porque este es usado dentro de la condición, fuera del bloque do.

"Factorial de:", 1); Ventana de diálogo, espera a que el usuario ingrese un interger y lo devuelve.

.arg(factArg).arg(fact) cada %n es reemplazado con un valor arg()

.arg("¿Quieres calcular otro factorial?"); Las sentencias largas pieden continuar en múltiples líneas, tanto como se topen con símbolos limitadores.

QMessageBox::Yes ¦ QMessageBox::No); bitwise or de dos valores

#include <QtGui>

int main (int argc, char* argv[]) { 
   QApplication app(argc, argv);
   QTextStream cout(stdout);     

   // Declaración de variables
   int respuesta = 0;

   do {
       // variables locales de loop:
       int factArg = 0;
       int fact(1);
       factArg = QInputDialog::getInteger(0, "Calculadora del Factorial",
           "Factorial de:", 1);
       cout << "El usuario ingresó: " << factArg << endl;
       int i=2;
       while (i <= factArg) {
           fact = fact * i;
           ++i;
       }
       QString dijo = QString("El Factorial de of %1 es %2.\n%3")
           .arg(factArg).arg(fact)
           .arg("¿Quieres calcular otro factorial?");    
       respuesta = QMessageBox::question(0, "¿Jugar de nuevo?", dijo,
           QMessageBox::Yes ¦ QMessageBox::No);
   } while (respuesta == QMessageBox::Yes);
   return EXIT_SUCCESS;
 }


Este programa hace uso de las siguientes clases:

  1. QApplication - Un objeto sencillo que necesita existir en todas las aplicaciones Qt.
  2. QInputDialog - Para hacer preguntas al usuario.
  3. QMessageBox - Para enviar respuestas al usuario.
  4. QString - Una clase de cadena unicode. Estamos usando un muy poderoso método llamado arg(), el cual nos permite formatear valores parametrizados (%1, %2, etc) dentro de la cadena.
  5. QTextStream - Para flujos hacia/desde archivos de texto. En este ejemplo, definimos una variable llamada cout que cumple las mismas metas (stdout) que el cout de iostream desde la librería estándar de C++. Como desde ahora obtendremos las entradas de usuario desde diálogos y otros other widgets, no es necesario crear un cin más.


Para compilar esta aplicación, necesitamos un archivo de proyecto. Un archivo de proyecto describe el proyecto enlistando todos los otros archivos, así como todas las opciones y localizaciones de archivos que son necesarios para construir el proyecto. Debido a que esta es una aplicación muy simple, el archivo de proyecto también es muy simple, como se muestra en el Ejemplo 1.7

Ejemplo 1.7[editar]

Ejemplo: Ejemplo 1.7. src/early-examples/example1/example1.pro
La primera ínea, TEMPLATE = app, indica que qmake debería iniciar con un Makefile de plantilla adecuado para construcción de aplicaciones. Si este fuera un archivo de proyecto para una librería, deberías de ver TEMPLATE = lib para indicar que una plantilla de librería Makefile debería ser usada en su lugar. Una tercera posibilidad es que tuviesemos nuestro propio codigo fuente distribuido a lo largo de varios subdirectorios, cada uno teniendo su propio archivo de proyecto. En este caso deberíamos ver TEMPLATE = subdirs dentro del archivo de proyecto alojado en el directorio raiz, lo que causaría un Makefile para ser producido en el directorio raiz y en cada subdirectorio.
TEMPLATE = app
SOURCES += fac1.cpp
win {
        CONFIG += console
}


Para conseguir nuestro ejecutable solo nos queda ejecutar la herramienta llamada qmake para generar el/los Makefile y recompilamos con make.

Cuando arrancamos esta aplicación, primero veremos un diálogo de entrada como el de la Figura 1.1

Figura 1.1[editar]

Diálogo de Entrada de Factorial
Diálogo de Entrada de Factorial


Después de que el usuario ingrese el número y haga click en OK, usaremos un QMessageBox con el valor calculado resultante.

Figura 1.2[editar]



Versión para imprimir esta pagina