Plantilla para libros ISBN

Transcripción

Plantilla para libros ISBN
Diseño de
Sistemas Informáticos Industriales
PRÁCTICAS
Licencia
Ingeniería Técnica Industrial (Electrónico)
Departamento de Informática de Sistemas y Computadores
Escuela Técnica Superior de Ingeniería del Diseño
practica_biblioteques_qwt_Qt_r04.odt
4
BIBLIOTECAS Y COMPONENTES.
LA BIBLIOTECA QWT Y QT
Nota importante: probado únicamente en Microsoft Windows (XP, Vista, 7) y en Linux (Ubuntu
10.04, Archlinux).
1.OBJETIVOS
●
Practicar el uso de bibliotecas.
●
Introducir el uso de código software de terceros (repositorios, construcción, etc.).
●
Practicar la consultar de documentación típica de software de terceros.
2.MATERIAL NECESARIO
•
Ordenador PC compatible.
•
Sistema operativo Linux o Microsoft Windows (pendiente MacOSx).
•
Entorno de desarrollo Qt para C++.
•
Acceso a Internet.
3.INTRODUCCIÓN
En esta práctica se pretende ilustrar con esta práctica la posibilidad de incorporar código de terceras partes en nuestras aplicaciones.
Para este propósito, se ha elegido el proyecto de código abierto QWT
(http://qwt.sourceforge.net/ ), que es una biblioteca multiplataforma para la generación de distintos
“widgets” (gráficas, diales, etc.).
La siguiente figura muestra uno de los widgets en funcionamiento:
El proyecto genera una biblioteca estándar para el sistema operativo destino, con lo que se posibilita que puede ser empleada en distintos entornos de programación (Embarcadero/Borland Builder,
Qt,Microsoft Visual Basic, Microsoft Visual C++, etc).
Aprovechando que este proyecto se ha desarrollado en Qt, esto permite ilustrar su potencia y posibilidades para generar bibliotecas.
El proyecto viene con ejemplos de uso de la biblioteca que, precisamente, también están escritos
en Qt, así que son perfectos para poder ilustrar también su aprovechamiento.
Sobretodo se pretende ilustrar una situación típica de intento de uso de software de terceros. Se verán los contratiempos y cómo intentar superarlos. Es normal que esta práctica sea imposible de terminar.
4.DESARROLLO
4.1OBTENCIÓN DE LOS FUENTES DE QWT
4.1.1DESDE EL “REPOSITORIO”
Muchos proyectos software emplean los denominados “repositorios” para gestionar el código. Un
“repositorio” en este contexto, es un almacen del proyecto software que incluye la historia de cambios,
esto permite cosas interesantes como “volver atrás”, crear ramas del proyecto, fundir ramas, etc. Cual quier proyecto medianamente complejo no podría ser gestionado adecuadamente sin este tipo de herramientas.
En el curso 2010/2011, la única manera de obtener los fuentes era esta.
El repositorio QWT es de tipo “subversión (svn) , y lo primero será conseguir una copia local de la
siguiente manera:
En Linux se puede hacer en la linea de órdenes con,
svn co https://qwt.svn.sourceforge.net/svnroot/qwt/branches/qwt-5.2
y se hará una copia local sincronizada de todo el repositorio.
En Microsoft Windows se deberá instalar alguna herramienta adicional, por ejemplo, Tortoise
(http://tortoisesvn.tigris.org/).
(Pendiente: Qt Creator incorpora ahora herramientas para gestión de repositorios, quizá se pueda
hacer desde ahí).
4.1.2DESDE UN EMPAQUETADO DEL REPOSITORIO
En el curso 2010/2011, el proyecto QWT incorporó empaquetados de las versiones de QWT. Estos
empaquetados meten todo el repositorio en un archivo comprimido (por ejemplo, ZIP) y suelen añadir,
además, el proyecto construido en forma de ejecutables y de manules.
Se recomienda ir a http://sourceforge.net/qwt y echar un vistazo a los paquetes.
A fecha de 14/11/2011, QWT está en versión 6.0.1.
4.2CONSTRUCCIÓN DEL PROYECTO
NOTA: En el curso 2010/2011, la construcción fué como se indica a continuación. En el curso
2011/2012 fué todo muy sencillo (falta estudiar por qué).
En el paquete se puede echar un vistazo al archivo INSTALL para saber cómo construir el proyec to e instalar las bibliotecas. También se puede ver este archivo en la página web del proyecto en
http://qwt.sourceforge.net/qwtinstall.html.
Es importante destacar que, muchas veces, solo se puede utilizar la línea de órdenes (terminal de
Windows) para realizar estas tareas en lugar del entorno gráfico como se va a hacer aquí.
La manera de construir el proyecto está enfocada a los acostumbrados a este tipo de situaciones.
Se parece mucho a los inicios del tutorial “Al grano”.
Se recominda intentar comprender las instrucciones para construir el proyecto según la página oficial.
Estas instrucciones las podemos “traducir” usando Qt Creator de la siguiente manera:
•
Abrir qwt.pro
•
Crear un "build" nuevo con la sugerencia ofrecida por el entorno.
•
(Echarle un vistazo por dentro sin asustarse, se trata de una manera de meter muchos proyectos dentro de uno solo).
•
En QtCreator, hacer "Build->Run qmake".
•
En QtCreator, hacer "Build->Rebuild all"
•
Esperar un buen rato (en Windows unos 15 minutos, en Linux unos 5 minutos).
Se habrán creado, entre otras cosas, las librerías .dll y el archivo de acceso a esas librerías. Ver siguiente pantalla.
Ya tenemos una biblioteca estándar disponible. Y la puede usar cualquier aplicación.
4.3EJEMPLO DE USO DE LA BIBLIOTECA
NOTA: Este es el escenario típico y es el que se produjo en el curso 2010/2011. En el 2011/2012
toda ha sido muy sencillo, pero es importante mantener el escenario.
QWT viene con una serie de ejemplos escritos también en Qt que permiten ilustrar su funcionalidad.
Ahora vamos con eso ejemplos para hacerse una idea de qué se puede hacer con esta biblioteca. Se
seguirán estos pasos en QtCreator:
•
Cerrar el proyecto anterior.
•
Abrir el archivo .pro que hay dentro de examples.
•
Reconstruir el proyecto (qmake, rebuild … típicos).
Oooppsss. No funciona. ¡Que pena!
Es importante leer qué nos dice el compilador para intentar solucionar el contratiempo. Más o menos, el error será el siguiente:
:: error: cannot find ­lqwtd5 :: error: collect2: ld returned 1 exit status Se trata de un error típico de enlazado al que hay que acostumbrase a identificar. La herramienta
no está encontrando las funciones de biblioteca.
En realidad se trata de dos errores. El primero es la imposibilidad de localizar la biblioteca de
QWT para acceso a la dll (libqwtd5.a).
Sin que sirva de precedente, y para ilustrar la problemática, se realizará el siguiente “apaño”:
•
Copiar el directorio "lib" creado en la primera etapa al raíz del proyecto qwt.
El proyecto se debería construir ahora sin errores (los “warnings” son por otros motivos).
Ahora podemos probar a ejecuta el proyecto (botón "play" de QtCreator). En realidad se han creado un montón de ejecutables y se intenta ejecutar el primero, que es "bode.exe".
Oooppsss. No funciona. ¡Puñetas!.
Tranquilos, se trata de una sensación normal de todos los que usan herramientas externas. Se in tentará identificar mejor el problema:
•
Abre el explorador de Windows y localiza bode.exe.
•
Haz clic sobre el ejecutable. Debería salir algo del siguiente estilo.
La razón es que, ahora, el problema está en que la aplicación no puede localizar y cargar la biblioteca dinámica. Este es un problema típico de las aplicaciones que usan librerías dinámicas. Una compilación estática resolvería este problema particular.
Para solucionar este problema debemos colocar la biblioteca en la ruta de búsqueda de bibliotecas
de Windows según se ha indicado en el material de teoría. Otro recurso típico es copiarla en C:\Windows\system32, pero es, más bien, una chapuza.
Se hará otra chapuza: copia qwt5.dll al directorio donde se han creado los ejecutables y probar de
nuevo.
¡Repuñetas! ¡Esto es un infierno!!!!
Tranquilidad. Sigue los siguientes pasos:
•
Abrir un teminal de windows configurado para Nokia Qt (Inicio->Nokia ... -> Command
prompt)
•
Moverse hasta el directorio donde están los ejecutables.
•
Ejecutar bode.exe
!Menos mal!.
Lo que ocurre ahora es que el ejecutable encuentra QWT, pero ahora no localiza las .dll de Qt, que
sí viene preconfiguradas desde dentro de Qt Creator. Abriendo el terminal, se configura la variable
PATH para que las bibliotecas de Qt sean localizables.
Prueba los ejemplos.
(Quizá sea interesante hablar ahora de Innosetup, nullsoft, etc.). Pel dimecres!!!!
4.4AMPLIACIÓN 1. COMPRENSIÓN DE DEPENDENCIAS.
El objetivo de esta actividad es intentar analizar un .pro muy complejo y adaptarlo a nuestras necesidades.
•
Realiza una copia del subproyecto dial (qwt...\examples\dial).
•
Abre con QtCreator el proyecto dial.pro.
•
Modifica el proyecto de manera que solo queden las etiquetas conocidas. Observar que include(*.pri) hace una inclusión de texto. Se deberán seguir todas las inclusiones.
4.5SOLUCIÓN AMPLIACIÓN 1.
(El miércoles se juega con todo esto y vemos en qué queda).
Para que un proyecto nuestro pudiese aprovechar Qwt bastaría con añadir a nuestro .pro las siguientes líneas:
# Adding QWT support ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
# This is also my example for DSII 2010/2011
# set a helper variable with the root path of Qwt
QWT_ROOT = qwt­5.2
# include a .pri with the configuration of Qwt
include($${QWT_ROOT}/qwtconfig.pri)
# search path for header files (.h)
INCLUDEPATH += $${QWT_ROOT}/src
# to resolve dependencies, also search here
DEPENDPATH += $${QWT_ROOT}/src
win32 {
DEFINES += QT_DLL QWT_DLL
LIBS += ­L$${QWT_ROOT}/lib ­lqwtd5
}
unix {
LIBS += ­L$${QWT_ROOT}/lib ­lqwtd
}
En el manual que incluye Qt se explica, con mucha claridad, como trabajar con los archivos de
proyecto y qué significa cada clave.
La siguiente imagen es un ejemplo de una aplicación que incluye las líneas anteriores y en el que
se ha incorporado Qwt para realizar gráficas.
5.AMPLIACIÓN 2.USO DE LAS BIBLIOTECAS.
Se trata ahora de probar que se puede aprovechar la biblioteca. La idea es lograr una aplicación
que haga uso de alguno de los componentes.
La manera fácil es la siguiente:
•
Crea una copia del ejemplo simple_plot
•
Analízalo y manipúlalo para cambiar su comportamiento. Usa la documentación online de
Qwt.
La manera valiente (se recomienda seguir antes la anterior) es con los siguientes pasos:
•
Construye un proyecto de ventana Qt a partir de las plantillas de QtCreator.
•
Adapta el .pro para hacer uso de la Qwt.
•
Prueba a compilar.
•
Añade widgets de Qwt echando un vistazo al ejemplo simple_plot y a la documentación
online para hacer uso de él. Se recomienda utilizar alguno facilito, como los que viene en
el ejemplo “dial”.
Antes de asustarse:
•
Hay cosas de simple_plot que tienen que ver con C++ y no se entienden.
•
El manual de Qwt es tremendamente escueto. Si hay que usarlo a partir de eso solo, pues
mal está la cosa. Cotilleando los ejemplos y el manual ha sido la única manera de pillarlo.
Mentira en el curso 2011/2012. En la zona de descarga hay un manual bastante bueno.
Se pueden usar un par de vectores de doubles y pasarle la curva a la gráfica usando el método de
QwtPlotCurve setDataRaw().

Documentos relacionados