QT - Qt + CMAKE + Visual Studio

 
Vista:

Qt + CMAKE + Visual Studio

Publicado por Ingeniero (1 intervención) el 02/08/2007 10:48:27
Hola amigos!

Antes de nada, NO SOY INFORMÁTICO, por lo que perdonad la incultura.

Estoy intentando introdurcirme en el mundillo de las GUI de la mano de QT (v 3.2.2). Mis programas los hago correr en Visual Studio 2005. Para crear los proyectos utilizo CMAKE 2.6 patch 6. Sistema operativo WXP.

Por el momento he intentado hacer programas muy sencillos, en donde aparecian algunos controles pero sin mayor complicación. Los problemas han llegado cuando he intentado crear mis propias SLOTS o SIGNALS. Al incluir la macro QOBJECT en el archivo de cabecera correspondiente no puedo linkar. Si quito la macro, el proyecto linka perfectamente, se ejecuta perfectamente, PERO en la shell aparece el siguiente mensaje: QObject::connect: No such signal QVBox::valueChanged(int). Por ahí he leído que deberían de generarse unas moc files del tipo: moc_archivo.cpp.

La verdad es que llevo unos cuantos dias batallando con esto y estoy un poco frustrado. Para ser más explicito os pegaré los ficheros de código que estoy utilizando:

Hay 3 archivos:
Chapter7.cpp (equivale al main.cpp)
lcdrange.cpp
lcdrange.h

fichero lcdrange.h:

#ifndef LCDRANGE_H
#define LCDRANGE_H

#include <qvbox.h>

class QSlider;
class QLCDNumber;

class LCDRange : public QVBox
{
Q_OBJECT
public:
LCDRange( QWidget *parent=0, const char *name=0 );

int value() const;
QSlider *slider;
QLCDNumber *lcd;
public slots:
void setValue( int );

signals:
void valueChanged( int );

private:

};

#endif // LCDRANGE_H

fichero lcdrange.cpp

#include "lcdrange.h"

#include <qslider.h>
#include <qlcdnumber.h>

LCDRange::LCDRange( QWidget *parent, const char *name ): QVBox( parent, name )
{
//QLCDNumber *lcd = new QLCDNumber( 2, this, "lcd" );
lcd = new QLCDNumber( 2, this, "lcd" );
slider = new QSlider( Horizontal, this, "slider" );
slider->setRange( 0, 99 );
slider->setValue( 0 );
connect( slider, SIGNAL(valueChanged(int)),lcd, SLOT(display(int)) );
connect( slider, SIGNAL(valueChanged(int)),SIGNAL(valueChanged(int)) );
}

int LCDRange::value() const
{
return slider->value();
}

void LCDRange::setValue( int value )
{
slider->setValue( value );
}

fichero Chapter7.cpp

#include <qapplication.h>
#include <qpushbutton.h>
#include <qlcdnumber.h>
#include <qfont.h>
#include <qvbox.h>
#include <qgrid.h>

#include "lcdrange.h"

class MyWidget : public QVBox
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );
};

MyWidget::MyWidget( QWidget *parent, const char *name ): QVBox( parent, name )
{
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
quit->setFont( QFont( "Times", 18, QFont::Bold ) );

connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );

QGrid *grid = new QGrid( 4, this );

LCDRange *previous = 0;
for( int r = 0 ; r < 4 ; r++ ) {
for( int c = 0 ; c < 4 ; c++ ) {
LCDRange* lr = new LCDRange( grid );
if ( previous )
connect( lr, SIGNAL(valueChanged(int)),previous, SLOT(setValue(int)) );
previous = lr;
}
}
}

int main( int argc, char **argv )
{
QApplication a( argc, argv );

MyWidget w;
a.setMainWidget( &w );
w.show();
return a.exec();
}

Tambien les pego el archivo cmake que he estado utilizando hasta el momento:

cmakelists.txt

find_package(Qt3 REQUIRED)

add_definitions(${QT_DEFINITIONS} -D_CRT_SECURE_NO_DEPRECATE)

include_directories (${QT_INCLUDE_DIR})

link_directories (${KPLANNER_BINARY_DIR}/planner)

qt_wrap_cpp (gui2d CGU.cpp CGUI.hpp)
qt_wrap_cpp (gui2d CMainWin.cpp CMainWin.hpp)

if (WIN32)

link_libraries(${QT_LIBRARIES} soqt1.lib coin2.lib)

else (WIN32)

link_libraries(${QT_LIBRARIES} SoQt)

endif(WIN32)

add_executable(aplicacion_de_ejemplo
Chapter7.cpp
lcdrange.h
lcdrange.cpp
)

El código fuente lo he sacado de un tutorial de QT por lo que no creo que haya errores de código. Cómo veis es un programa muy sencillo.

Alguien podria decirme como seria el cmake correcto? Si puede ser escríbanlo entero ya que no soy informático.

Muchas gracias a todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder