Development/Tutorials/First program (es)

From KDE TechBase


Development/Tutorials/First program


Siempre hay una primera vez ...

Nuestro primer programa consistirá en mostrar el más que "programáticamente" conocido y amistoso saludo: "¡Hola Mundo!". Para esto, usaremos un objeto de la Clase KMessageBox y modificaremos el texto de uno de los botones.

Tip
Si deseas obtener más información respecto a cualquier clase con la que te topes, Konqueror ofrece una rápida alternativa: por ejemplo, si buscas información sobre KMessageBox, sólamente tipea "kde:kmessagebox" en Konqueror y éste te llevará inmediatamente a la documentación correspondiente.


Tip
Puede ser que desees usar KDevelop para tus proyectos, ya que ofrece muchas ventajas y funcionalidades, como por ejemplo: completación de código, fácil acceso a documentación y soporte para correción de errores (Debugging).

Lee este tutorial para configurar KDevelop apropiadamente para esta tarea. Puedes comprobar si la configuración es correcta intentando abrir una aplicación KDE 4 con KDevelop.

Todavía necesitarás editar los ficheros de CMake de forma manual.


El Código

Todo el Código Fuente que necesitaremos estará en un archivo, que será llamado: main.cpp. Copia el siguiente código dentro de él:

  1. include <QString>
  2. include <KApplication>
  3. include <KAboutData>
  4. include <KMessageBox>
  5. include <KCmdLineArgs>
  6. include <KLocalizedString>

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

   KAboutData aboutData("tutorial1",                  // El nombre interno de la aplicación
                        0,                            // El nombre del catálogo del mensaje; se usará el mombre interno si es NULL
                        ki18n("Tutorial 1"),          // El nombre de la aplicación mostrado.
                        "1.0",                        // Cadena de texto con la versión del programa
                        ki18n("Ventana Emergente KMessageBox"),   // Descripción pequeña de lo que el programa hace.
                        KAboutData::License_GPL,      // Identificador de licencia
                        ki18n("(c) 2007"),            // Texto de Copyright
                        ki18n("Alguna información..."),        // Texto que contenga información adicional de cualquier tipo.
                        "http://tutorial.com",        // La Página Web oficial de la aplicación.
                        "[email protected]");       // La dirección de correo electrónico para el reporte de bichos (Bugs).
   KCmdLineArgs::init( argc, argv, &aboutData );
   KApplication app;
   KGuiItem guiItem( QString( "Hola" ), QString(),
                     QString( "Este es un Tooltip" ),
                     QString( "Esto es un \"¿Qué es esto?\" ) );
   KMessageBox::questionYesNo( 0, "¡Hola Mundo!", "Hola", guiItem );

}

La primera forma específica de programación en KDE que encontramos en el código es la clase KAboutData. Esta clase tiene la función de almacenar la información general de la aplicación, como la descripción, los autores o la información de licencia. Toda aplicación KDE debería hacer uso de esta clase.

Luego, la clase KCmdLineArgs. Esta clase es utilizada para procesar los argumentos que son ingresados a través de línea de comandos y derivar las pertinentes acciones según los argumentos; por ejemplo, ejecutar un programa para abrir un determinado archivo, pasándole su nombre a la aplicación como argumento de línea de comandos. Desde luego, en este tutorial, simplemente la iniciaremos con el objeto KAboutData que hemos creado, y así, por ejemplo, poder obtener la versión o los autores con los argumentos --version o --author, respectivamente.

En la línea 13 creamos un objeto de la clase KApplication. Es necesario aplicar esta sentencia, una vez, en cada programa, para activar módulos como i18n y otros servicios base.

Ahora que tenemos listo todo la configuración base de nuestra aplicación, podemos agregar cosas más interesantes. Vamos a crear una ventana emergente o de mensaje (popup) personalizando el texto de uno de sus botones. Para hacer esta modificación, necesitaremos un objeto KGuiItem. El primer argumento del constructor de esta clase refiere al texto que aparecera en el Item (en nuestro caso, un botón). Como segundo argumento tenemos la opción de añadir un icono al botón, pero como no queremos uno, sólamente aplicamos QString() (cadena vacía). Tercero, establecemos el tooltip (o información emergente, que es el texto que aparece cuando se detiene el cursor sobre un item), y finalmente, la cadena de información "¿Qué es esto?" (que se activa con un click derecho del mouse o presionando Shift-F1).

Ahora, ya listo nuestro item, podremos crear el Popup o Ventana Emergente. Haremos una llamada a la función KMessageBox::questionYesNo() que, por defecto, crea un Popup con los botones "Sí" y "No". El segundo argumento es el texto que irá en el cuerpo del Popup, el tercer argumento es el título de la ventana, y finalmente, pasamos el objeto KGuiItem guiItem en remplazo del botón por defecto "Sí".


Hemos finalizado lo concerniente al código. Ahora, a compilar y probar.


Construcción

Si el entorno está configurado como lo descrito en Getting_Started/Build/Unstable_Version, podrás compilar este código con:

g++ main.cpp -o tutorial1 \

-I$QTDIR/include/Qt \
-I$QTDIR/include/QtCore \
-I$QTDIR/include \
-I$KDEDIR/include/KDE \
-I$KDEDIR/include \
-L$KDEDIR/lib \
-L$QTDIR/lib -lQtCore -lQtGui -lkdeui -lkdecore

y luego, correrlo con:

dbus-launch ./tutorial1


Usando CMake

Si lo anterior ha funcionado, querrá utilizar [Development/Tutorials/CMake|CMake]], como el resto de KDE. Éste localizará automáticamente las librerías y ficheros de cabecera para KDE, Qt, etc., y le permitirá construir sus aplicaciones eficazmente en otros computadores.

CMakeLists.txt

Crea un fichero en el mismo directorio que se encuentra main.cpp, llamado CmakeLists.txt, con este contenido:

project (tutorial1)

find_package(KDE4 REQUIRED) include_directories( ${KDE4_INCLUDES} )

set(tutorial1_SRCS main.cpp)

kde4_add_executable(tutorial1 ${tutorial1_SRCS}) target_link_libraries(tutorial1 ${KDE4_KDEUI_LIBS})

La función find_package() localiza el paquete determinado (en este caso, KDE4) y establece algunas variables describiendo el lugar de los las librerías y cabeceras del paquete. En este caso usaremos la variable KDE4_INCLUDES, que contiene la ruta de las cabeceras KDE4.

En orden de posibilitar al compilador encontrar estos ficheros, pasaremos esta variable a la función include_directories(), la cual añade las cabeceras KDE4 a la ruta de búsqueda de las cabeceras del compilador.

Luego crearemos una variable llamada tutorial1_SRCS usando la función set(). Esta vez vamos a, simplemente, asignarle el nombre de nuestro único fichero fuente.

Después usaremos kde4_add_executable() para crear un ejecutable, llamado tutorial1, desde los ficheros fuentes listados en nuestra variable tutorial1_SRCS. Finalmente, enlazaremos nuestro ejecutable a la librería KDE4 kdeui, usando target_link_libraries() y la variable KDE4_KDEUI_LIBS, que fue configurada por la función find_package().

Elaboración y Ejecución

Nuevamente, si el entorno está configurado como lo descrito en Getting_Started/Build/Unstable_Version, podrás compilar con este comando:

cmakekde

Y lanzar la aplicación con:

./tutorial1.shell