InicioGlosarioSignals_SlotsWidget Categorías del FAQVisitantes en linea:3 Visitantes de hoy:29 Total de visitantes:11974 |
Qt-docCompilar 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:
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
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 )
cd C:\Qt\4.4.0\src\plugins\sqldrivers\mysql
Y listo con eso debería funcionar. Espero sea útil
qmake -o Makefile "INCLUDEPATH+=c:\mysql\include" "LIBS+=-LC:\mysql\lib\opt -lmysql" mysql.pro make 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.
|
AmigosKDEQt on Freenode LugOroVerde Okular ggerman
|