Inicio

Glosario

Signals_Slots
Widget

Categorías del FAQ


Visitantes en linea:3
Visitantes de hoy:29
Total de visitantes:11974

Qt-doc

Compilar el driver de mysql para Qt4 en windows me ha llevado más tiempo de lo que habia pensado, esto en GNU/Linux es algo sumamente sencillo.

Primero debemos tener algunas cosas:

  • Debemos bajar mysql y precisamente este paquete( Windows Essentials (x86) ): http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-essential-5.0.51b-win32.msi/from/http://mysql.he.net/ . Digo precisamente este paquete porque intente con el zip ( el paquete sin instalación ) y no funciono de ninguna manera.

Al instalar este paquete debemos decirle al instalador que la instalación sea "custom" y debemos decirle que instale los encabezados o seleccionamos todo y listo :) . Yo lo instale en c:\mysql

  • Luego de la instalación debemos solucionar un pequeño problema, ya que mysql viene compilado con el compilador de microsoft y debemos pasar la libreria libmysql.dll a un formato que mingw "entienda"

Para esto debemos hacer lo siguiente:

C:\>cd MySQL
C:\MySQL>cd lib
C:\MySQL\lib>cd opt
C:\MySQL\lib\opt>c:\mingw-utils\bin\reimp -d libmysql.lib
C:\MySQL\lib\opt>c:\mingw\bin\dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a

El binario reimp lo pueden conseguir de mingw-utils, yo lo bajé de aquí: http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=61599&release_id=126568 y lo descomprimi como puede verse en c:\mingw-utils ( el archivo es un tar.gz )

  • Ahora a la parte de Qt, una vez hecho lo anterior ( sino se hace habrá problemas de linkeo ) pasamos a compilar el plugin, yo tengo instalado Qt4.4 en c:\Qt
cd C:\Qt\4.4.0\src\plugins\sqldrivers\mysql
qmake -o Makefile "INCLUDEPATH+=c:\mysql\include" "LIBS+=-LC:\mysql\lib\opt -lmysql" mysql.pro
make
Y listo con eso debería funcionar. Espero sea útil

leo | General, Qt-doc | 23 Julio, 7:00pm | Comentar acerca de esto

Bueno este paso que por supuesto está documentado en Qt es muy sencillo:

Primero vamos a donde tenemos instalado o tenemos los fuentes de qt:

cd /directorio/de/qt-x11-opensource-src-4.4.0/src/plugins/sqldrivers/mysql

Luego solo llamamos a qmake con dos variables para evitar errores: INCLUDEPATH = donde buscará el include mysql.h LIBS = donde buscará la librería de mysql para enlazar

Esto quedaría algo así en ubuntu/kubuntu:

qmake -o Makefile "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib -lmysqlclient_r" mysql.pro

Y luego:

make && make install
leo | Qt-doc | 29 Mayo, 11:26am | Comentar acerca de esto

Habremos notado que al escribir una clase para que trabaje con las Qt y pueda usar señales y slots tendremos que agregar algo así:

  class miclase {
  Q_OBJECT
  public slots:
   /*...*/ 
  signals:
  /*...*/
  };

 

¿Pero qué es todo esto?

Podemos notar que tanto Q_OBJECT, public slots y signals no forman parte del ANSI C++ y ¿porquñe nuestro compilador lo compila?. Si vamos al código fuente de las Qt podremos ver que estos elementos están definidos como macros. En GNU/Linux dicho fichero puede verse en /usr/share/qt4/include/Qt/qobjectdefs.h en Qt versión 4 y en /usr/share/qt3/include/qobjectdefs.h en Qt versión 3, cabeceras que importamos indirectamente. En este archivo vamos a ver algo así:

/*...*/
#   define slots
#   define signals protected
/*...*/
#define Q_OBJECT \
public: \
    static const QMetaObject staticMetaObject; \
    virtual const QMetaObject *metaObject() const; \
    virtual void *qt_metacast(const char *); \
    QT_TR_FUNCTIONS \
    virtual int qt_metacall(QMetaObject::Call, int, void **); \
private:
/* tmake ignore Q_OBJECT */
#define Q_OBJECT_FAKE Q_OBJECT
/*... Corte el codigo por razones obvias */

 

Entonces podemos ver que el compilador nunca nos dará error al compilar debido a estas macros. Pero ahora se preguntaran ¿cómo hacen las Qt para relacionar las clases mediantes las señales y slots?. Muy sencillo "MOC", el Meta Object Compiler es el que parsea los archivos cuyas clases tienen definida la macro Q_OBJECT e ignarará las que no la tienen. Entonces este agarrará el código fuente de la clase y generará código extra a nuestro sistema. Seguro vieron archivos moc_xxx.cpp (xxx es el nombre del archivo) que aparecen al compilar, esto es el código que genera moc. Más adelante hablaré más sobre esto.

leo | Qt-src, Qt-doc | 8 Agosto, 8:55pm | Comentar acerca de esto

Amigos

KDE
Qt on Freenode
LugOroVerde
Okular
ggerman