Friday, August 13, 2010

Visual Studio and Qt.

In this post we will explain how to get Qt installation for visual studio.

1. Download Qt source code. This is currently available in the nokia website: http://qt.nokia.com/downloads,
Unzip the file into e.g. c:\qt\4.6.1-vc. Important to use a path with no embedded spaces, as the Qt build tools have problems with them.
Install the SDK completely. Install also the plugin for Qt in visual studio.



2. Add these 3 paths to the Environment Variables: “C:\Qt\2009.01\bin” ,
“C:\Qt\2009.01\qt\bin” and \VC\bin .


3. Run the Visual Studio Command prompt. Start > Program Files > Visual Studio > Visual and go to the Qt installation directory. Type vcvars32.bat.
This will create the environment variables required for the next step. The batch file resides in the VC\bin directory of your Visual Studio installation.

4. Type configure -platform win32-msvc2008. (will take a long time)
This will tell Qt to prepare itself for being compiled by the Visual Studio compiler. Again, if you use another version of VS than 2008, replace win32-msvc-2008 with the makespec appropriate for you. We need to this, because the prebuilt binaries that come with the Open Source Qt distribution for Windows cannot be used by the Visual Studio compiler.So to fix this, we have to build those files from the Qt sourcecode using the Visual Studio compiler.

5. Type nmake (will take even longer)

6. It will stop after a LONG while with an error

7. Delete all the instances of mocinclude.tmp, they are usually in:
src/3rdparty/webkit/WebCore/tmp/moc/{debug,release}_shared

8. Run nmake again

9. Go to your qt app and run qmake –t vcapp

10. This should create a sln for the project

You should now be able to build your Qt project in visual studio



References:
http://tom.paschenda.org/blog/?p=28
http://www.qtforum.org/article/31561/error-when-building-libraries.html
http://dcsoft.wordpress.com/2010/01/30/how-to-setup-qt-4-5-visual-studio-integration/
http://docs.google.com/viewer?a=v&q=cache:3e0M85Vdd3wJ:portfolio.delinkx.com/files/Qt.pdf+qt+visual+studio&hl=en&gl=us&pid=bl&srcid=ADGEEShHdqxYfPWGn-PCxWty0Z9ehLVLaPv-qlpDeaLAlcohpIxHFWMw-PqM4N5euTpmRrxOA5fSX8l6KJZmq-ttAfPgNqt8io-kjHQt5j3RWQgySF5MFnXGeXufW6jEipZCRVuZ8yqA&sig=AHIEtbRYvPmPZUfMm1fb0SVKaSjfYX_BVg

Watching some QT movies with a cute chic

Recientemente me vi con el problema de que queria hacer una aplicacion que tocara videos con extension .mov (Un archivo de tipo MOV representa un formato especial de QuickTime para guardar audio y video ) dentro de una aplicacion hecha con Qt. (Qt es un framework para el desarrollo de aplicaciones para que corran en multiples plataformas (Linux, windows, mac etc) y comunmente se suele usar hacer apliaciones graficas, esto es, aplicaciones que tienen ventanitas, menucitos etc.)

La documentacion para hacer programas que toquen videos de tipo .mov no es NADA amigable, por lo que decidi hacer este peque~o tutorial respecto a como se puede lograr esto.

Qt posee una clase llamada QMovie,con la cual se pueden mostar aniamciones sencillas que no cuentan con sonido ( lo cual estaba perfecto para lo que yo queria hacer) En resumen QMovie permite leer y cargar una aniamcion simple, como una animacion de tipo .GIF. Por lo cual si lograramos convertir nuestras aniamciones en formato .MOV a .GIF nuestro problema estaria resulto. Y bien, gracias a Google, encontre esta peque~a applicacion que justamente lleva esto acabo: http://www.geovid.com/VidGIF
Y ya con nuestro video convertido en .GIF el codigo para hacer una ventanita que toque nuestro video es muy sencillo:

#include qtgui qapplication
#include qwidget
#include qhboxlayout
#include qlabel
#include qmovie
#include qpushbutton
#include qslider
int main(int argc, char *argv[])
{

QApplication a(argc, argv);
QWidget *win=new QWidget();
QHBoxLayout *lay=new QHBoxLayout();
QPushButton *play=new QPushButton("PLAY");
QPushButton *stop=new QPushButton("STOP");
QLabel *label=new QLabel;
QMovie *movie = new QMovie("Resources/musica.GIF");
movie->start();
label->setMovie(movie);
QObject::connect(play,SIGNAL(clicked()),movie,SLOT(start()));
QObject::connect(stop,SIGNAL(clicked()),movie,SLOT(stop()));

lay->addWidget(label);
lay->addWidget(play);
lay->addWidget(stop);
win->setLayout(lay);
win->show();
return a.exec();
}



Basicamente estoy cargando la pelicula, la agrego a una etiqueta la cual despues es agregada al widget, tambien agrego dos botones, los cuales sirven para detenerla y tocarla y finalmente presento al usuario la ventanita.
Esta es una manera sencilla de correr en QT peliculas de tipo .mov, aunque solo es valido si no nos interesa el audio que tiene la pelicula, para cosas mas complicadas que involucran audio es necesario checar otras clases que proporciona qt.
Los dejo con la ventanita que se crea, asi como con una imagen de la pelicula que esta tocando:
Arnie de Californiavspace=10 width="400" height="135">