03
Jul
08

Aplicaciones Qt4 multiplataforma que se integran al escritorio (KDE,Windows)

Para que el usuario tenga una buena experiencia con una aplicación es necesario que esta este integrada al escritorio que esta utilizando, por lo menos así lo veo yo, las aplicaciones desarrolladas con Qt4 se integran muy bien con Windows, pero con Linux no es tan bueno, ¿por que?, un ejemplo son los diálogos para abrir y guardar archivos, de eso se trata este tema, miremos los diálogos en Windows:

Dialogo nativo de Windows:

Al usar este diálogo nuestros usuarios no sentirán nada extraño al usar la aplicación, este diálogo es el que se abre por defecto cuando utilizamos QFileDialog.

Dialogo no nativo de Windows (Diálogo de Qt):

Este diálogo es el original de Qt, la verdad no hay mucho problema con este tipo de diálogo en Windows pero en Linux si tenemos una pequeña desventaja, en Linux solo vamos a tener el diálogo de Qt pero no tenemos uno nativo como en Windows:

La desventaja es que este dialogo no puede manejar los dispositivos extraibles como memorias USB, CDs, DVDs, etc. etc. ( bueno, eso es lo que yo me he podido dar cuenta ), si queremos abrir o guardar un archivo en una memoria USB primero tenemos que montar esa memoria, ya sea por la consola, utilizando los servicios de KDE, etc. y después ir en el diálogo Qt al lugar donde la montamos, ejemplo /media/memoriaUSB, en Windows no sucede eso, si abrimos un diálogo y luego metemos nuestra memoria automáticamente se crea una nueva unidad, digamos la unidad E: , y ya abrimos o guardamos archivos, sencillo, entonces en Linux no hay diálogos nativos como en Windows, la verdad no es nada extraño ya que en Linux no solo hay un escritorio como en Windows, entonces no se puede tomar los diálogos de GNOME, de KDE u otros como nativos, en unas distribuciones van a estar disponibles algunos diálogos, en otros otros y en otras distribuciones están disponibles todos, ejemplo, es cierto que no importa nuestra distribución, vamos a poder instalar lo que nos haga falta, pero a lo que voy es que no puede existir un diálogo nativo para Linux, a menos que KDE, GNOME y los demás se pongan de acuerdo para usar un solo tipo de diálogo para abrir y guardar archivos.

En este pequeño ejemplo se muestra como integrar nuestra aplicación a KDE 4 y utilizar su diálogos para abrir y guardar archivos si estamos en Linux, si estamos en Windows entonces usamos los nativos de Windows, esto para que siga siendo multiplataforma:

Al usar los diálogos de KDE tenemos la ventaja de trabajar los dispositivos extraibles de una manera muy fácil, montamos, desmontamos, etc. así que el usuario de nuestro programa no tiene que montar en otro lado su memoria y luego regresar al diálogo para trabajar con ella.

Código

Para poder hacer que nuestra aplicación se pueda compilar en Linux y en Windows vamos a utilizar el preprocesador de C++

#ifdef Q_WS_X11
#include <KFileDialog>
#else
#include <QFileDialog>
#endif

#ifdef Q_WS_X11 nos sirve para saber si estamos en Linux, si ese es el caso es incluyen la cabecera del diálogo de KDE para nuestra aplicación, si no se incluye la normales de Qt

#ifdef Q_WS_X11

direccion=KFileDialog::getOpenFileName(KUrl::fromPath(dir),filter,parent,caption);
#else

direccion=QFileDialog::getOpenFileName ( parent,caption,dir,filter);
#endif

En otra parte del código utilizamos otra vez el preprocesador para saber que linea se va a compilar, si estamos en Linux se usa el KFileDialog, si estamos en Windows se usa QFileDialog.

No podemos hacer esto:

#ifdef Q_WS_X11
#define Linux TRUE
#else
#define Linux FALSE

if ( Linux )
direccion=KFileDialog::getOpenFileName(KUrl::fromPath(dir),filter,parent,caption);
else
direccion=QFileDialog::getOpenFileName ( parent,caption,dir,filter);

Podemos usar eso para otra cosa pero no para este caso ya que si compilamos eso en Windows nos va a dar error ya que no va a encontrar KFileDialog, en Linux si compilaría, entonces tenemos que usar el preprocesador dentro de nuestro código, esto para que a la hora de compilar en windows solo entre a las partes que si puede compilar WIndows y viceversa.

No se puede explicar todo el código aquí así que les dejo el ejemplo qt4_dialogos.tar.gz

Este esta desarrollado en KDevelop, yo tengo KDE 3 y KDE 4 asi que lo necesario para compilar cosas de KDE 4 lo tengo en /opt/kde4/include, /opt/kde4/lib, si lo tienen en otra parte solo hay que cambiarlo en “Opciones del subproyecto”, en las pestañas “Cabeceras” y “Bibliotecas”.

Para compilarlo en Windows solo hay cambiar el archivo /src/src.pro, antes de pasarlo a Windows hay que cambiarle el fin de linea para que podamos editarlo bien en Windows, digamos en KWrite en el menú Herramientas -> Fin de línea -> Windows/DOS y lo guardamos, ya con eso lo podemos editar sin problema en Windows, ahora le quitamos lo siguiente a /src/src.pro:

INCLUDEPATH += /opt/kde4/include/KDE \
/usr/lib/qt4/include \
/usr/lib/qt4/include/QtGui \
/usr/lib/qt4/include/QtCore \
/usr/lib/qt4/include/Qt \
/usr/lib/qt4/mkspecs/linux-g++ \
/opt/kde4/include/

LIBS += -L/opt/kde4/lib/kde4 \
-L/usr/lib/qt4/lib \
-L/opt/kde4/lib \
-lkutils \
-lkio \
-lkfile \
-lkdecore \
-lkdeui

Eso que le quitamos son las cabeceras y bibliotecas que se necesitan para compilar lo de KDE 4, si no se lo quitamos no compilará en Windows, eso es lo único que tenemos que cambiar así que no es la gran cosa.

La aplicación se mira asi:

Una aplicación multiplataforma que se integra al escritorio según el sistema operativo, aquí lo único que le faltaría al preprocesador de C++ es verificar si esta disponible las librerías de KDE 4, si no lo estuviera que usara los diálogos de Qt.

Anuncios

3 Responses to “Aplicaciones Qt4 multiplataforma que se integran al escritorio (KDE,Windows)”


  1. agosto 7, 2008 en 11:19 pm

    Excelente, me gusto mucho el informe ando en lo mismo, asi que me estare pasando por tu blog frecuentemente. Gracias por compartir ! 😀

  2. 2 Chepetux
    agosto 8, 2008 en 4:13 am

    Que bueno que te haya gustado y que te haya servido, y para eso estamos, para compartirnos entre todos para el mutuo beneficio

  3. 3 Juan Manuel Lallana
    junio 3, 2009 en 9:19 pm

    Amén, nos vemos en kde 4.4


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


CGSOL 2008

Publicidad CGSOL 2008

A %d blogueros les gusta esto: