Qt Blog QtBlog Administrator http://qtblog.com.ar El rincón de las librerías Qt http://qtblog.com.ar JAWS 0.7.4 2007, Leandro Emanuel López bajo la licencia GPL v2 2008-07-23T19:17:07+00:00 <![CDATA[ Compilar el plugin de mysql para Qt4 en Windows con MinGW ]]> QtBlog Administrator http://qtblog.com.ar/admin.php http://qtblog.com.ar/index.php/blog/show/Compilar-el-plugin-de-mysql-para-Qt4-en-Windows-conMinGW.html 2008-07-23T19:17:07+00:00 2008-07-23T19:00:42+00:00 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

]]>
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

]]>
<![CDATA[ Marcando fechas en QCalendarWidget ]]> QtBlog Administrator http://qtblog.com.ar/admin.php http://qtblog.com.ar/index.php/blog/show/Marcando-fechas-en-QCalendarWidget.html 2008-07-03T16:46:54+00:00 2008-07-03T16:39:28+00:00 Hay veces que se tiene la necesidad de marcar ciertos eventos en un calendar widget y Qt nos provee una forma muy fácil de hacerlo.

Esta clase de ejemplo aclara todo. Lo único que hago es extender QCalendarWidget y agregarle un método appendDate que marcará nuestros eventos( sacado del core de zmviewer ) Ademaś utilizo el método setDateTextFormat( const QDate & date, const QTextCharFormat & format ) de QCalendarWidget para setear el formato que quiera ( por ahora solo un background en amarillo y el texto subrayado )

class CameraEventCalendar : public QCalendarWidget{
public:
    CameraEventCalendar( QWidget * parent ): QCalendarWidget ( parent ){};
    void appendDate( const QDate & date ){
        QTextCharFormat fmt;
        fmt.setBackground( QBrush( Qt::yellow ) );
        fmt.setToolTip(tr("Click here to view events of this day"));
        fmt.setFontUnderline( true );
        setDateTextFormat( date , fmt );
        m_eventsDateList.append( date );
    }

    QList <QDate> eventsDateList() const{
        return m_eventsDateList;
    }
private:
    QList <QDate> m_eventsDateList;

};
 

Por lo que utilizar este widget sería tan sencillo como:

//instanciar
CameraEventCalendar * cameraEventsCalendar = new CameraEventCalendar( this );
// a modo de ejemplo instanciar un modelo
// que su fuente de datos es la tabla Events
QSqlTableModel * model = new QSqlTableModel ( this , QSqlDatabase::database () );
model->setTable ( "Events" );
model->select();
//recorrer el modelo y setear los eventos al calendario
for ( int i = 0 ; i < m_model->rowCount(); i++ ){
         cameraEventsCalendar->appendDate ( model->record( i ).value( "StartTime" ).toDate() );
    }

 

]]>
Hay veces que se tiene la necesidad de marcar ciertos eventos en un calendar widget y Qt nos provee una forma muy fácil de hacerlo.

Esta clase de ejemplo aclara todo. Lo único que hago es extender QCalendarWidget y agregarle un método appendDate que marcará nuestros eventos( sacado del core de zmviewer ) Ademaś utilizo el método setDateTextFormat( const QDate & date, const QTextCharFormat & format ) de QCalendarWidget para setear el formato que quiera ( por ahora solo un background en amarillo y el texto subrayado )

class CameraEventCalendar : public QCalendarWidget{
public:
    CameraEventCalendar( QWidget * parent ): QCalendarWidget ( parent ){};
    void appendDate( const QDate & date ){
        QTextCharFormat fmt;
        fmt.setBackground( QBrush( Qt::yellow ) );
        fmt.setToolTip(tr("Click here to view events of this day"));
        fmt.setFontUnderline( true );
        setDateTextFormat( date , fmt );
        m_eventsDateList.append( date );
    }

    QList <QDate> eventsDateList() const{
        return m_eventsDateList;
    }
private:
    QList <QDate> m_eventsDateList;

};
 

Por lo que utilizar este widget sería tan sencillo como:

//instanciar
CameraEventCalendar * cameraEventsCalendar = new CameraEventCalendar( this );
// a modo de ejemplo instanciar un modelo
// que su fuente de datos es la tabla Events
QSqlTableModel * model = new QSqlTableModel ( this , QSqlDatabase::database () );
model->setTable ( "Events" );
model->select();
//recorrer el modelo y setear los eventos al calendario
for ( int i = 0 ; i < m_model->rowCount(); i++ ){
         cameraEventsCalendar->appendDate ( model->record( i ).value( "StartTime" ).toDate() );
    }

 

]]>
<![CDATA[ Textos verticales ]]> QtBlog Administrator http://qtblog.com.ar/admin.php http://qtblog.com.ar/index.php/blog/show/Textos-verticales.html 2008-06-02T12:37:51+00:00 2008-06-02T12:09:40+00:00 El otro día me vi en la necesidad de hacer que un texto sea vertical... Leyendo un poco antes de empezar a programar me encontre con este FAQ en Qt La idea es muy sencilla solo dibujar un texto y rotarlo 90 grados en el paintEvent, o sea siempre que el widget sea dibujado. Acá dejo un ejemplo para hacer esto:

#include <QApplication>
#include <QWidget>
#include <QPainter>

class VerticalText : public QWidget
{
public:
    VerticalText(QWidget *parent = 0)
    : QWidget(parent){ text = "No text";}

    void paintEvent(QPaintEvent *)
    {
        QPainter p(this);
        drawRotatedText(&p, 90, width() / 2, 0, text);
    }
    void drawRotatedText(QPainter *painter, float degrees, int x, int y, const QString &text)
    {
        painter->save();
        painter->drawImage( QPoint( x  , y ) , QImage("/usr/share/icons/crystalsvg/32x32/apps/colors.png") );
        //comenzar a dibujar a la posicion de y + 35 ( la imagen ocupa 32px y dejo 3px de espacio )
        painter->translate(x, y + 35);
        painter->rotate(degrees);
        painter->drawText(0, 0, text);
        painter->restore();
    }
    QString text;
};

int main(int argc, char *argv[])
{
      QApplication app(argc, argv);
      VerticalText text;
      text.text = "Hola, soy un texto vertical :)";
      text.show();
      return app.exec();
}
 

Ahora bien, este widget es muy sencillo si queremos cambiar el texto deberiamos hacer algo así:
text.text = "Otro texto vertical"
text.repaint();
 
También estoy dibujando una imagen para que se vea la posibilidad de dibujar más cosas :)

]]>
El otro día me vi en la necesidad de hacer que un texto sea vertical... Leyendo un poco antes de empezar a programar me encontre con este FAQ en Qt La idea es muy sencilla solo dibujar un texto y rotarlo 90 grados en el paintEvent, o sea siempre que el widget sea dibujado. Acá dejo un ejemplo para hacer esto:

#include <QApplication>
#include <QWidget>
#include <QPainter>

class VerticalText : public QWidget
{
public:
    VerticalText(QWidget *parent = 0)
    : QWidget(parent){ text = "No text";}

    void paintEvent(QPaintEvent *)
    {
        QPainter p(this);
        drawRotatedText(&p, 90, width() / 2, 0, text);
    }
    void drawRotatedText(QPainter *painter, float degrees, int x, int y, const QString &text)
    {
        painter->save();
        painter->drawImage( QPoint( x  , y ) , QImage("/usr/share/icons/crystalsvg/32x32/apps/colors.png") );
        //comenzar a dibujar a la posicion de y + 35 ( la imagen ocupa 32px y dejo 3px de espacio )
        painter->translate(x, y + 35);
        painter->rotate(degrees);
        painter->drawText(0, 0, text);
        painter->restore();
    }
    QString text;
};

int main(int argc, char *argv[])
{
      QApplication app(argc, argv);
      VerticalText text;
      text.text = "Hola, soy un texto vertical :)";
      text.show();
      return app.exec();
}
 

Ahora bien, este widget es muy sencillo si queremos cambiar el texto deberiamos hacer algo así:
text.text = "Otro texto vertical"
text.repaint();
 
También estoy dibujando una imagen para que se vea la posibilidad de dibujar más cosas :)

]]>
<![CDATA[ Compilar el driver de mysql en Qt 4 como plugin ]]> QtBlog Administrator http://qtblog.com.ar/admin.php http://qtblog.com.ar/index.php/blog/show/Compilar-el-driver-de-mysql-en-Qt-4-como-plugin.html 2008-05-29T11:33:12+00:00 2008-05-29T11:26:36+00:00 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
]]>
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
]]>
<![CDATA[ WebKit y Qt4.4 ]]> QtBlog Administrator http://qtblog.com.ar/admin.php http://qtblog.com.ar/index.php/blog/show/WebKit-y-Qt44.html 2008-06-02T12:32:44+00:00 2008-02-16T13:16:55+00:00 La versión Qt4.4 ha incorporado el fabuloso webkit. WebKit es un proyecto open source para armar un motor para un navegador web. Asi mismo, webkit es el motor de safary y un muchas aplicaciones populares en OS X. WebKit nacio de un branch de KHTML.

Gracias a esto podremos renderizar páginas web con solo estas lineas de código:

#include <Qt/QtGui>
#include <QtWebKit/QWebView>

int main(int argc, char *argv[])
{
      QApplication app(argc, argv);
       QWebView *view = new QWebView( );
       view->load(QUrl("http://www.lugoroverde.com.ar"));
       view->show();

      return app.exec();
}
 

¿No les parece impresionante? A mi si :p
Abajo un screenshot de la aplicacion compilada:
Y no solo eso, también pasa el test acid por si alguien quiere saber:
Pueden descargar el snapshot de qt4.4 desde aquí: http://trolltech.com/developer/downloads/qt/qt44-preview-download

]]>
La versión Qt4.4 ha incorporado el fabuloso webkit. WebKit es un proyecto open source para armar un motor para un navegador web. Asi mismo, webkit es el motor de safary y un muchas aplicaciones populares en OS X. WebKit nacio de un branch de KHTML.

Gracias a esto podremos renderizar páginas web con solo estas lineas de código:

#include <Qt/QtGui>
#include <QtWebKit/QWebView>

int main(int argc, char *argv[])
{
      QApplication app(argc, argv);
       QWebView *view = new QWebView( );
       view->load(QUrl("http://www.lugoroverde.com.ar"));
       view->show();

      return app.exec();
}
 

¿No les parece impresionante? A mi si :p
Abajo un screenshot de la aplicacion compilada:
Y no solo eso, también pasa el test acid por si alguien quiere saber:
Pueden descargar el snapshot de qt4.4 desde aquí: http://trolltech.com/developer/downloads/qt/qt44-preview-download

]]>
<![CDATA[ Nueva release del ZMViewer ]]> QtBlog Administrator http://qtblog.com.ar/admin.php http://qtblog.com.ar/index.php/blog/show/Nueva-release-del-ZMViewer.html 2008-02-01T01:51:31+00:00 2008-02-01T01:38:34+00:00 También dedicaré un espacio a mi proyecto favorito.

ZMViewer es un front-end de zoneminder ( http://www.zoneminder.com ) el cual es un sistema de video vigilancia exelente. Hoy lanze una nueva versión del zmviewer, en esta versión incorporé una nueva clase para manejar el stream, más que nada para leer los boundary, ya que zoneminder envia frames del tipo: Content-Type: multipart/x-mixed-replace;boundary=ZoneMinderFrame , lo que significa que cada "--ZoneMinderFrame" viene un paquete. La versión anterior de zmviewer hacia esto un poco desprolijo. Ahora creo que con la nueva versión esto será casi perfecto :); para esto agregue una clase llamada QMultiPartReader ya que creo que puede leer casi cualquier tipo de frames multipartes.

ZMViewer permite lo siguiente:

  • Conexión con muchos servidores zoneminder en simultaneo.
  • Cambiar la apariencia con un sistema de temas
  • Visualizar los eventos que ocurrieron en las cámaras... por ej. Grabación por detección de movimiento de una cámara
  • y muchas otras cosas más...

La página del proyecto esta en http://sourceforge.net/projects/zmviewer

]]>
También dedicaré un espacio a mi proyecto favorito.

ZMViewer es un front-end de zoneminder ( http://www.zoneminder.com ) el cual es un sistema de video vigilancia exelente. Hoy lanze una nueva versión del zmviewer, en esta versión incorporé una nueva clase para manejar el stream, más que nada para leer los boundary, ya que zoneminder envia frames del tipo: Content-Type: multipart/x-mixed-replace;boundary=ZoneMinderFrame , lo que significa que cada "--ZoneMinderFrame" viene un paquete. La versión anterior de zmviewer hacia esto un poco desprolijo. Ahora creo que con la nueva versión esto será casi perfecto :); para esto agregue una clase llamada QMultiPartReader ya que creo que puede leer casi cualquier tipo de frames multipartes.

ZMViewer permite lo siguiente:

  • Conexión con muchos servidores zoneminder en simultaneo.
  • Cambiar la apariencia con un sistema de temas
  • Visualizar los eventos que ocurrieron en las cámaras... por ej. Grabación por detección de movimiento de una cámara
  • y muchas otras cosas más...

La página del proyecto esta en http://sourceforge.net/projects/zmviewer

]]>
<![CDATA[ Nokia quiere adquirir Trolltech ]]> QtBlog Administrator http://qtblog.com.ar/admin.php http://qtblog.com.ar/index.php/blog/show/Nokia-quiere-adquirir-Trolltech.html 2008-01-28T12:10:59+00:00 2008-01-28T11:57:39+00:00 Hoy, Nokia y Trolltech anunciaron en que estaban de acuerdo en que Nokia haga una oferta pública para adquierir Trolltech. Aunque como dicen en la carta pública la adquisición se encuentra en una fase muy temprana.

Aseguran que Qt y Qtopia seguiran por el mismo camino.

Más info en los blogs de trolltech y en ElPais.com

]]>
Hoy, Nokia y Trolltech anunciaron en que estaban de acuerdo en que Nokia haga una oferta pública para adquierir Trolltech. Aunque como dicen en la carta pública la adquisición se encuentra en una fase muy temprana.

Aseguran que Qt y Qtopia seguiran por el mismo camino.

Más info en los blogs de trolltech y en ElPais.com

]]>
<![CDATA[ QtBlog ha vuelto ]]> QtBlog Administrator http://qtblog.com.ar/admin.php http://qtblog.com.ar/index.php/blog/show/QtBlog-ha-vuelto.html 2008-01-18T16:14:14+00:00 2008-01-18T16:14:14+00:00 Luego de tanto tiempo y con un poco de perdida de información del blog, qtblog a vuelto a ponerse en funcionamiento. De a poco iré armando este blog nuevamente. Saludos

]]>
Luego de tanto tiempo y con un poco de perdida de información del blog, qtblog a vuelto a ponerse en funcionamiento. De a poco iré armando este blog nuevamente. Saludos

]]>
<![CDATA[ Nueva sección ]]> QtBlog Administrator http://qtblog.com.ar/admin.php http://qtblog.com.ar/index.php/blog/show/Nueva-seccin.html 2007-02-21T17:22:53+00:00 2007-02-21T17:14:28+00:00 Se agrego una nueva sección llamada recursos en la cual se pondrá código, widgets, plugins, etc y con la que también se presentó un nuevo widget llamado SLineEdit. El link se encuentra en la parte derecha de la página.

]]>
Se agrego una nueva sección llamada recursos en la cual se pondrá código, widgets, plugins, etc y con la que también se presentó un nuevo widget llamado SLineEdit. El link se encuentra en la parte derecha de la página.

]]>
<![CDATA[ De número a QString y viceversa ]]> QtBlog Administrator http://qtblog.com.ar/admin.php http://qtblog.com.ar/index.php/blog/show/De-nmero-a-QString-y-viceversa.html 2007-02-20T15:13:54+00:00 2007-02-19T22:38:59+00:00 Este pequeño artículo surge de una necesidad mía de poder mostrar un número calculado ( por ej. int total = 23 + 6 ) en un QLabel, QLineEdit o un widget en especial. Entonces el tema acá es pasar de número(int,float,double) a QString, porque para setear el texto de un QLabel usamos la funcíon setText ( &QString ). Mostraré dos formas posibles de hacer esto y una tercera usando simplemente "C".

De int,float,short o double a QString.

QString nos nos provee de el método sobrecargado setNum() el cual nos devuelve un QString del número pasado; de la siguiente manera: QString numero;

 int total = 23 + 6;
 numero = numero.setNum( total ); // numero = "29"
 QString flotante;
 float total2 = 23 / 6.00;
 flotante = flotante.setNum( total2 );
 

Además se puede hacer lo mismo con QString con el método estático sobrecargado number(), el cual funciona exactamente a setNum con la diferencia de ser estático. Ejemplo:

QString numero = QString::number( 55 ); // numero vale "55"
 

La última forma es con C y muy sencillo también con la función sprintf() (que se encuentra definida en stdio.h), ejemplo:

char cadena[50];
 sprintf(cadena, "%6d", 125); // La cadena tendra el contenido "   232"
 sprintf(cadena, "%6.2f", 442.2); // La cadena tendra el contenido "332.20"
 sprintf(cadena, "%04x", 127); // La cadena tendra el contenido "007f"
 

Ahora de QString a número.

No detallaré mucho en esto porque es todavía más fácil. QString posee funciones para pasar QString a int,unsignerd int (uint), long,etc. las cuales son:

int toInt ( bool * ok = 0, int base = 10 ) const // a int
 double toDouble ( bool * ok = 0 ) const // a double
 float toFloat ( bool * ok = 0 ) const // a float
 long toLong ( bool * ok = 0, int base = 10 ) const // a Long

 /* etc */
 

Ejemplo:
QString num = "22";
 int entero = num.toInt();
 

Por último para lo mismo tendremos las siguientes funciones en C: int atoi(const char *numPtr); double atof(const char *numPtr); long int atol(const char *numPtr); Ejemplo:

QString num= "22";
 int entero = atoi(num.toAscii () );
 
]]>
Este pequeño artículo surge de una necesidad mía de poder mostrar un número calculado ( por ej. int total = 23 + 6 ) en un QLabel, QLineEdit o un widget en especial. Entonces el tema acá es pasar de número(int,float,double) a QString, porque para setear el texto de un QLabel usamos la funcíon setText ( &QString ). Mostraré dos formas posibles de hacer esto y una tercera usando simplemente "C".

De int,float,short o double a QString.

QString nos nos provee de el método sobrecargado setNum() el cual nos devuelve un QString del número pasado; de la siguiente manera: QString numero;

 int total = 23 + 6;
 numero = numero.setNum( total ); // numero = "29"
 QString flotante;
 float total2 = 23 / 6.00;
 flotante = flotante.setNum( total2 );
 

Además se puede hacer lo mismo con QString con el método estático sobrecargado number(), el cual funciona exactamente a setNum con la diferencia de ser estático. Ejemplo:

QString numero = QString::number( 55 ); // numero vale "55"
 

La última forma es con C y muy sencillo también con la función sprintf() (que se encuentra definida en stdio.h), ejemplo:

char cadena[50];
 sprintf(cadena, "%6d", 125); // La cadena tendra el contenido "   232"
 sprintf(cadena, "%6.2f", 442.2); // La cadena tendra el contenido "332.20"
 sprintf(cadena, "%04x", 127); // La cadena tendra el contenido "007f"
 

Ahora de QString a número.

No detallaré mucho en esto porque es todavía más fácil. QString posee funciones para pasar QString a int,unsignerd int (uint), long,etc. las cuales son:

int toInt ( bool * ok = 0, int base = 10 ) const // a int
 double toDouble ( bool * ok = 0 ) const // a double
 float toFloat ( bool * ok = 0 ) const // a float
 long toLong ( bool * ok = 0, int base = 10 ) const // a Long

 /* etc */
 

Ejemplo:
QString num = "22";
 int entero = num.toInt();
 

Por último para lo mismo tendremos las siguientes funciones en C: int atoi(const char *numPtr); double atof(const char *numPtr); long int atol(const char *numPtr); Ejemplo:

QString num= "22";
 int entero = atoi(num.toAscii () );
 
]]>