Esta serie de tutoriales son una copia de lo ya traducido en TechBase por mi. En dicha página puedes encontrar la versión original y la versión traducida al español.
Contenido
- Resumen
- KAction
- El código
- main.cpp
- mainwindow.h
- mainwindow.cpp
- Explicación
- Creando el objeto KAction
- Estableciendo las propiedades de KAction
- Texto
- Icono
- Atajo de teclado
- Añadir a la colección
- Conectar la acción
- KStandarAction
- Añadir la acción a los menús y a las barras de herramientas
- XMLGUI
- Archivo appnameui.rxc
- tutorial3ui.rc
- CMake
- CMakeLists.txt
- Make, instalar y ejecutar
- Avanzando
Resumen
Este tutorial introduce el concepto de las acciones. Las acciones son una forma unificada de proporcionar al usuario la forma de interactuar con tu programa.
Por ejemplo, si queremos permitir que el usuario del Tutorial 2 pueda borrar la caja de texto pulsando un botón de la barra de herramientas, desde una entrada del menú File o a través de un atajo de teclado, podremos realizarlo mediante un KAction.

KAction
Un KAction es un objeto que contiene toda la información sobre el icono y el atajo de teclado asociado a una determinada acción. La acción se conecta a un slot, que lleva a cabo el trabajo de la acción.
El código
main.cpp
- #include <KApplication>
- #include <KAboutData>
- #include <KCmdLineArgs>
- #include "mainwindow.h"
- int main (int argc, char *argv[])
- {
- KAboutData aboutData( "tutorial3", "tutorial3",
- ki18n("Tutorial 3"), "1.0",
- ki18n("Area de texto usando KAction."),
- KAboutData::License_GPL,
- ki18n("Copyright (c) 2008 Developer") );
- KCmdLineArgs::init( argc, argv, &aboutData );
- KApplication app;
- MainWindow* window = new MainWindow();
- window->show();
- return app.exec();
- }
mainwindow.h
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <KXmlGuiWindow>
- #include <KTextEdit>
- class MainWindow : public KXmlGuiWindow
- {
- public:
- private:
- KTextEdit* textArea;
- void setupActions();
- };
- #endif
mainwindow.cpp
- #include "mainwindow.h"
- #include <KApplication>
- #include <KAction>
- #include <KLocale>
- #include <KActionCollection>
- #include <KStandardAction>
- : KXmlGuiWindow(parent)
- {
- textArea = new KTextEdit;
- setCentralWidget(textArea);
- setupActions();
- }
- void MainWindow::setupActions()
- {
- KAction* clearAction = new KAction(this);
- clearAction->setText(i18n("Limpiar"));
- clearAction->setIcon(KIcon("document-new"));
- clearAction->setShortcut(Qt::CTRL + Qt::Key_W);
- actionCollection()->addAction("limpiar", clearAction);
- connect(clearAction, SIGNAL(triggered(bool)),
- textArea, SLOT(clear()));
- KStandardAction::quit(kapp, SLOT(quit()),
- actionCollection());
- setupGUI();
- }
Explicación
El archivo está basado en el código de KXmlGuiWindow del Tutorial 2. La mayoría de los cambios están en mainwindow.cpp, un cambio estructural importante es que el constructor de MainWindow ahora llama a setupActions() en vez de a setupGUI(). En setupActions() va el nuevo código de KAction antes de llamar a setupGUI().
Creando el objeto KAction
KAction se construye en varios pasos. El primero es incluir la biblioteca KAction y crear el KAction:
...
KAction* clearAction = new KAction(this);
Estableciendo las propiedades de KAction
Texto
Ahora que tenemos nuestro objeto KAction, podemos empezar a establecer sus propiedades. El siguiente código establece el texto que se mostrará en el menú y el de debajo del icono del KAction en la barra de herramientas:
Icono
Si la acción va a mostrarse en el la barra de herramientas, estaría bien que tuviera un icono que la representara. El siguiente código establece como icono el icono estándar de KDE document-new mediante el uso de la función setIcon():
Atajo de teclado
Establecer un atajo de teclado para lanzar nuestra acción es igual de simple:
Añadir a la colección
Para que la acción sea accesible por el framework XMLGUI (explicado en profundidad mas adelante) debe añadirse a la colección de acciones de la aplicación. La colección de acciones es accesible mediante la función actionCollection():
Añadimos clearAction a la colección con el nombre de limpiar. Este nombre lo usará el framework XMLGUI para referirse a la acción, es decir, no debe traducirse ya que solo se usará internamente.
Conectar la acción
Una vez que hemos establecido las propiedades de la acción, es necesario conectarla a algo útil, por lo que conectamos nuestra acción a la acción clear de KTextEdit:
textArea, SLOT( clear() ) );
KStandardAction
Para las acciones que normalmente aparecen en casi todas las aplicaciones KDE, como 'quit', 'save', y 'load', existen unas acciones ya creadas, accesibles a través de KStandardAction.
Son muy sencillas de usar. Una vez que has incluido las bibliotecas, simplemente añadelas con la función que quieras que realicen. Por ejemplo:
Añadir la acción a los menús y a las barras de herramientas
Por el momento, hemos creado la nueva acción "Limpiar" pero no se ha asociado a ningún menú o barra de herramientas. Esto lo podemos hacer con una tecnología de KDE llamada XMLGUI, que hace cosas majas como barras de herramientas móviles.
XMLGUI
La función setupGUI() de la clase KXmlGuiWindow depende del sistema XMLGUI para construir la GUI, el cual la realiza analizando el archivo de descripción XML de la interfaz.
La regla para establecer el nombre del archivo XML es appnameui.rc, donde appname es el nombre que estableces en KAboutData (en este caso, tutorial 3). Por lo que en nuestro ejemplo, llamamos al archivo tutorial3ui.rc, y estará localizado en el directorio del código. Cmake maneja donde será puesto el archivo en última instancia.
Archivo appnameui.rc
Como la descripción de la UI está definida en el archivo XML, el layout debe seguir unas reglas estrictas. Este tutorial no profundizará en exceso en este aspecto, pero para mas información puedes echar un vistazo un tutorial antiguo.
tutorial3ui.rc
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
- <gui name="tutorial3" version="1">
- <ToolBar name="mainToolBar" >
- <text>Main Toolbar</text>
- <Action name="limpiar" />
- </ToolBar>
- <MenuBar>
- <Menu name="file" >
- <Action name="limpiar" />
- </Menu>
- </MenuBar>
- </gui>
Además de tener la acción en la barra de herramientas, también se puede añadir a la barra de menú. Aquí la acción se ha añadido al menú File de MenuBar de la misma manera que la añadimos a la barra de herramientas.
Cambia el atributo 'version' de la etiqueta si cambiaste el archivo .rc desde la última instalación, para forzar una actualización de la cache del sistema.
Algunas notas sobre la interacción entre el código y el archivo .rc: Los menús aparecen automáticamente y deberían tener una etiqueta hija a menos que se refieran a los menús estándar. Las acciones deberán crearse manualmente y se insertarán mediante actionCollection() usando el nombre del archivo .rc. Las acciones pueden ocultarse o desactivarse, mientras que los menús no.
CMake
Por último, el tutorial3ui.rc hay que ubicarlo en algún lugar donde KDE pueda encontrarlo (no lo puedes dejar en el directorio de las fuentes!). Esto significa que el proyecto tiene que ser instalado en algún sitio.
CMakeLists.txt
- project(tutorial3)
- find_package(KDE4 REQUIRED)
- include_directories(${KDE4_INCLUDES})
- set(tutorial3_SRCS
- main.cpp
- mainwindow.cpp
- )
- kde4_add_executable(tutorial3 ${tutorial3_SRCS})
- target_link_libraries(tutorial3 ${KDE4_KDEUI_LIBS})
- install(TARGETS tutorial3 DESTINATION ${BIN_INSTALL_DIR})
- install(FILES tutorial3ui.rc
- DESTINATION ${DATA_INSTALL_DIR}/tutorial3)
Make, instalar y ejecutar
Si no tienes acceso de escritura a tu directorio de instalación de KDE4, puedes instalarlo en una carpeta de tu directorio personal.
Para decirle a CMake donde instalar el programa, establece la variable DCMAKE_INSTALL_PREFIX. Probablemente quieras instalarlo en algún sitio local para testearlo (probablemente sea un poco tonto hacer el esfuerzo de instalar estos tutoriales en el directorio de KDE), por lo que podría ser el siguiente caso:
- mkdir build && cd build
- cmake .. -DCMAKE_INSTALL_PREFIX=$HOME
- make install
- $HOME/bin/tutorial3
Avanzando
Ahora puedes continuar con el Tutorial 4 - Guardar y Abrir.
- Inicie sesión o regístrese para enviar comentarios



Comentarios recientes
hace 1 semana 7 horas
hace 1 semana 3 días
hace 2 semanas 2 días
hace 2 semanas 6 días
hace 3 semanas 2 días
hace 3 semanas 2 días
hace 3 semanas 2 días
hace 3 semanas 3 días
hace 3 semanas 4 días
hace 3 semanas 4 días