Editor

Como en los ejemplos mostrados anteriormente, el primer paso es generar un nuevo proyecto en Qt Creator, File $ \rightarrow$New File or Project $ \rightarrow$Qt4 GUI Application. Una vez creado, se edita el fichero editor.ui mediante Qt Designer, eliminando los widgets innecesarios y agregando un objeto de QLineEdit, uno de QListWidget, tres de QPushButton y dos de QRadioButton. Así, modificando las propiedades de cada uno y utilizando las opciones de agrupamiento (en la barra superior) la interfaz resultante es como se muestra en la figura 4.

Figura 4: Interfaz Editor
\includegraphics[scale=0.4]{fig/editor.ps}

Es importante el nombre que se da a cada objeto, ya que mediante él serán referenciados. Por esto, se modifican los nombres de los objetos de las diferentes clases de widgets según:


Clase de Widget Nombre Objeto
QListWidwet lista
QLineEdit entrada
QPushButton agregar
QPushButton convertir
QPushButton finalizar
QRadioButton mayuscula
QRadioButton minuscula

Luego de esto, las modificaciones para programar las funcionalidades descrita deben realizarse directamente al código. De esta forma, se agregaran tres slots, add(), conv() y finish(). El primero agrega el texto escrito en entrada a lista. El segundo convierte el texto en entrada a mayúsculas o minúsculas, dependiendo de que objeto de QPushButton se encuentre activado (true: activado, false: desactivado). Por último, finish(), genera el archivo lista.data y agrega el texto en lista, luego termina la aplicación. Así, los slots son definidos en editor.h como se muestra en el cuadro 5 e implementados en editor.cpp como se muestra en el cuadro 6.


Tabla: Definición slots de editor
\begin{table}
\begin{center}
\lstset{
%aboveskip=8pt,
backgroundcolor=\color{...
...nish();
\par
;
\par
...



Tabla: Implementación slots de editor
\begin{table}
\begin{center}
\lstset{
%aboveskip=8pt,
backgroundcolor=\color{...
...ata());
fclose(file);
\par
close();
}
\end{lstlisting}
\end{center}\end{table}


Posterior a esto, se establece la conexión entre las señales emitidas al ser presionado cada boton y el slot correspondiente. Dicha conexión se realiza modificando el constructor de la clase editor como se muestra en el cuadro 7. Además, mediante las líneas 6 y 7 se ``entrega el foco''7 a entrada y se selecciona por defecto el objeto de QPushButton mayuscula, respectivamente. Cabe destacar, que los objetos de la clase QPushButton son mútuamente excluyentes, por lo que no es necesario programar este comportamiento. Es importante recalcar que los widgets agregados no efectúan comportamientos que no se programen previamente. Un ejemplo de esto es la inserción de datos a lista, ya que mediante la línea 8 del cuadro 7 se establece que al emitir la señal clicked() por el botón agregar se ejecuta el slot add(), pero además, en la línea siguiente, se establece que al emitirse la señal returnPressed() por entrada, se ejecuta el mismo slot. De esta forma, los datos pueden ser ingresados presionando el botón agregar o presionando la tecla enter del teclado, una vez finalizada la escritura. Si no se agrega la línea 9 al constructor, el presionar la tecla enter no genera acción alguna.


Tabla 7: Constructor de editor
\begin{table}
\begin{center}
\lstset{
%aboveskip=8pt,
backgroundcolor=\color{...
...NAL(clicked()),this,SLOT(finish()));
}
\end{lstlisting}
\end{center}\end{table}


Una vez finalizado este proceso basta compilar y ejecutar la aplicación para corroborar que se cumplan los objetivos propuestos.

Cristian Duran-Faundez 2013-07-23