Introducción a Patrones de Diseño en C++ con Qt4/1.7 Diálogos Qt para entrada/salida de usuario
Diálogos Qt para entrada/salida de usuario
editarEl 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
editarint 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:
- QApplication - Un objeto sencillo que necesita existir en todas las aplicaciones Qt.
- QInputDialog - Para hacer preguntas al usuario.
- QMessageBox - Para enviar respuestas al usuario.
- 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.
- 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
editarTEMPLATE = 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
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