Para los entendidos en Qt Designer y Kdevelop

Buenas...necesito realizar una pequeña aplicación para linux. El lenguaje es C/C++ y creo que voy a utilziar Qt Designer que es bastante intuitivo. He estado cacharreando con él y mirando manuales, pero el problema llega a la hora de escribir el código de alguna función y compilar para poder ejecutar la aplicación. En algunos manuales te dice que lo hagas de una forma utilizando tambien el IDE de Kdevelop, que tampoco puedo porque los en los manuales utilzian versiones muy antiguas y no puedo seguirlos, en cambio he encontrado en una página, que se puede hacer facilmente utilizando Qmake. Y mi pregunta es...¿de forma puedo, a partir de una aplicación, asignarle código a algún control (por ejemplo un botón) y después y compilarlo y poder ejecutarlo?

Es un poco larga la pregunta, pero los que haya programado alguna vez utilizando estas herramientas sabrán de lo que hablo...

Un saludo, Gracias.
No es la respuesta que buscas pero voy a tratar de ayudarte.

Lo primero, yo plantearía la pregunta en este foro:
http://www.kdevelop.org/phorum5/

Lo siguiente, si quieres informacion y tutoriales actualizados, unos buenos sitios por donde empezar son estos :
http://developer.kde.org/documentation/
http://www.kdevelop.org/
http://doc.trolltech.com/4.1/index.html

Espero que obtengas la respuesta que buscas.

Saludozzzzzz
Basándome en Kdevelop 3.2.2, te puedo decir que la integración funciona de pena de momento. Es preferible que uses el Designer por separado, y una vez que tengas diseñados los forms, derives de ellos en tus clases.

Además Qt4 abandona el diseñador del Qt3, que es casi un IDE, para ser solo diseñador, para que cada IDE se centre en lo que se tiene que centrar.

Este tutorial está bastante bien:

http://www.digitalfanatics.org/projects/qt_tutorial/



Y bueno, después de hacer varias cosillas con Qt desde cero, para mí lo más cómodo es lo siguiente:

- Diseño los forms básicamente con el Designer, sin añadir más lógica que las señales predefinidas de los widgets
- Traduzco con uic los .ui a C++, y ya trabajo directamente con ellos, sin necesidad de añadir un nivel más de herencia ;)

Como IDE, si sabes usarlo, te recomiendo Eclipse con CDT antes que Kdevelop ahora mismo, porque Kdevelop no acaban de estabilizarlo y tiene bastantes fallos gordos. Cuando Trolltech integre correctamente Qt4 en Kdevelop (cosa prevista) como lo han hecho con Visual Studio, las cosas cambiarán.

Por cierto, que hablo de Qt a pelo, nunca he hecho nada para KDE.
Churly escribió:- Diseño los forms básicamente con el Designer, sin añadir más lógica que las señales predefinidas de los widgets

Que quieres decir con eso?
Yo estoy intentando hacer rular el Dev C++ con Qt 4.1 que por ahora funciona bastante bien [oki] (en los ejemplos de Copy&Paste por lo menos) Pero la duda que tengo es, cómo puedo hacer para que los botones hagan cosas?
Vamos que no tengo muy claro cómo funciona Qt ni el sistema de Slots y Señales, supongo que será algo parecido a la Programación por Eventos cómo en BCB... Si alguien pudiera echar una ayudita.
Respecto a cómo integrar Qt para Dev C++ hay bastante información en internet, si quieres ahorrarte tiempo enMi Delicious tienes algunos enlaces interesantes que me han servido [beer]
Sí, es la aproximación a la programación orientada a eventos que usa Qt.

Una SIGNAL es una señal que puede enviar un QObject a otro a través de una SLOT del segundo.

Por ejemplo, QButton, el botón normal, tiene una señal llamada clicked(), que puedes conectar a otro objeto, como QLabel, a través de su slot setText(), para que al pulsar el botón aparezca una cadena en la etiqueta.

Cosas simples como esta, se pueden hacer directamente desde el diseñador, ya sea desde el de Qt3 como el de Qt4. Cosas más complejas yo prefiero hacerlas directamente en código.

De todas formas, todo está muy bien explicado en la documentación, y en el libro oficial (que puedes descargar si quieres en PDF).
Buenas, aquí estoy de nuevo después de estar toda la tarde cacharreando con el Qt y el Qmake, por fin he podido compilar y ejecutar una aplicación. Al pinrcipio no sabía por que no funcionaba el qmake, y después de buscar, me di cuenta de que había que configurarlo, pero aún así no funcionaba, y la solución estaba en copiar el ejecutable (de qmake) a /home/usuario/bin... que cosas. Entonces cuando creas todos los archivos, en el directorio del proyecto haces "qmake", "make" y ejecutas...

De todas formas, no estoy del todo satisfecho porque veo que Qt utiliza su propio lenguaje de programación y sus propios tipos de datos, aunque mirándo ejemplos los entiendo, ¿hay alguna manera de programar gráficamente en C/C++, estilo C++ Builder?

Antes de nada gracias por contestar y todos los enlaces que me habeís puestp, aquí os dejo un manual muy bueno dónde explica todos los tipos de datos, etc...viene con unos ejemplos, si los queréis, avisadme.

http://perso.wanadoo.es/dinioalbino/Programacion%20con%20QT.pdf

¡Saludos!


PD: Churly, no se lo que quieres decir con Qt a pelo, es decir, el ejemplo que yo he hecho se ejecuta en KDE perfectamente...
No hay un estándar para lenguaje de GUIs ;-). Borland C++ usa su propio lenguaje también y además (hasta donde yo se), no usa ISO C++, cosa que Qt si hace. Lo que pasa es que te permite usar un lenguaje intermedio que será preprocesado antes de enviarlo al compilador de C++, pero ese lenguaje intermedio no es más que C++ con macros predefinidas.

Con Qt a pelo me refiero a no depender de bibliotecas de KDE. KDE tiene sus propios widgets, que en la mayoría de los casos son simples herencias de los mismos en Qt. Que se ejecute en KDE no tiene nada que ver, dentro del entorno KDE también se ejecutan aplicaciones GTK.
Ahh, vale vale, ya lo entiendo...entonces tendré que ponerme al día con los componentes y los tipos de datos de Qt. Una pregunta, ¿si yo instalo el Qt designer en windows, luego podría pasar todo el trabajo a linux (KDE) sin muchas complicaciones? Aunque la verdad, es que ya no tengo problemas para compilar ni ejecutar, pero para saberlo...

Todavía tengo dudas sobre los archivos .h y .cpp, me explico:

En el ejemplo del archivo el programador utiliza un main.cpp, cabecera.h y cabecera.cpp y en cabecera.cpp hay unas cosas que las entiendo porque están comentadas..., las funciones que están a lo último si son claras...quiero decir que si cada vez que quiera realizar una función tengo que escribir todo eso, o se genera automáticamente y solo hay que escribir los valores (el nombre de los botones) aunque eso ya se hace en modo gráfico...

En cambio en "prueba" que es una prueba que hice ayer, sólo hay un main y un app.ui.h -> donde automaticamente desde el modo gráfica puedes crearlas y sólo queda escribir el código...tambies me he dado cuenta de que el tio utiliza solo unos cuantos archivos y en el mio crea varias carpetas...

Bueno resumiendo, lo que quiero saber es que archivos tengo que crear ya sean .h o .cpp o ninguno ya que en el app.ui.h tambien me deja "programar"...


Dejo los dos archivos:

http://perso.wanadoo.es/dinioalbino/qt_ejemplo1.rar

http://perso.wanadoo.es/dinioalbino/prueba.rar


Saludos.
No, no vas a tener problemas, se ha hecho precísamente para eso, para que el cambio de plataforma sea solo volver a compilar.

En todos los toolkits de ventanas, ya sea Swing para Java, Qt, o Win.Forms para C# por ejemplo, hay dos maneras de hacer las cosas: a pelo escribiendo el código, o diseñandolo gráficamente (que no es más que generar el código por detrás luego).

El ejemplo primero que has hecho está hecho de la primera manera, que es como de verdad se aprende, sabiendo como funciona, y muchas veces como más rápido se hace ;)

El ejemplo que has hecho tú, está hecho con el Qt Designer. Lo único que hace Qt Designer es generar un fichero .ui (en XML) con el diseño. Este fichero es procesado en tiempo de compilación por uic que lo convierte a código C++ (si te fijas después de la compilación queda un directorio oculto .ui, con las clases generadas).

Como ves estás haciendo lo mismo pero de dos maneras diferentes. Ese ui.h que puedes crear desde el Qt Designer se incluye durante la compilación, y ahí puedes meter algo de código, pero no te lo recomiendo demasiado. Lo mejor es que la lógica del programa la metas en otras clases aparte, a ser posible siempre, no es nada bueno mezclar la presentación (las ventanas) con la funcionalidad.


No me explico muy bien, lo de profesor nunca fue lo mio XD.
No pasa nada, te entendido perfectamente. Entonces resuminedo, me recomiendas que cree las clases en un fichero .h y después la implementación de ellas en uno .cpp y después incluya el .h en el main.cpp, eso sería lo mejor, aunque claro teniendo en cuenta que viniendo de C++ Builder encontrarme con las clases de Qt es un tanto raro...de todas formas si veo que me lio mucho no tendré más remedio que meterlo en el archivo.ui.h...muchas gracias de toddas formas.

Y ahora una última pregunta, y con esta creo que puedo empezar a hcaer algo. Voy a necesitar una base de datos he visto que se puede "enlazar" Qt Designer con MySQL, y me pregunto si voy a tener muchos problemas... ein?


Gracias de nuevo, ¡profe! :p
Nunca usé nada con una BD usando el designer, pero creo que son simplemente widgets preparados que ya hacen las consultas. Vamos que plantas el widget, a través del asistente conectas a la base de datos, y ya está. Si necesitas interactuar con otras cosas, ya tendrás que programarlo claro.
hola una pregunta?

como hago para instalar esa herramientas en la distribucion KUBUNTU,
busque en el administrador de paquetes y no las veo??

bueno de antemano gracias ( soy novato en linux)

[idea]
Si mi memoria no falla creo que KUBUNTU se basa en Debian.
Por lo tanto los instalas como en Debian.
sabes lo que es el apt-get ? apt-get install? :Ð Leer un poco por los foros incluso internet no vendria mal ...
Sip, ya probé lo de las bases de datos, lo hice con mysql y añadí un control para ver una de las tablas y funcionó, hacía la conexión bien y todo pero al ejecutar me decía como que no encontraba dicha tabla, un error del QSqlcursor o algo así.. :?
Buenas, yo aquí sigo liado con lo mio, y quería preguntar una cosilla que no consigo hacerla por más que pruebo, lo que quiero es simple, que desde un formulario cuando le de a un botón me muestre otro formulario. Yo creo la señal clicked() del botón y se que el evento es FormX->show(); si no me equivoco pero siempre me da errores al compilar...


Gracias Churly, yo he buscado por ahí, programación orientada a objetos si se, aprendí con C++ y C++ Builder, lo que pasa que éste último te lo hace todo...y claro al llegar a Qt Designer me ha pillao el toro y cuando antes hacía FormX->Show(); aquí tengo que escribir un poco más...


Saludos!
Lo primero sería saber que error te da ;)
Ya lo he conseguido mirnado en un manual el código es éste:

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

CFormulario::CFormulario(QWidget *parent, const char *name) : QWidget( parent , name )
{
       
}

CFormulario *Form = new CFormulario()
Form->show();




Pero eso muestra un formulario normal, ¿cómo hago apra que muestre uno que yo he diseñado desde la interfaz gráfica?
Por eso te decía que creo que no tienes muy claro C++.

Es hacer eso mismo, pero instanciando un objeto de la clase que diseñaste (el nombre del formulario). Lo puedes ver por ejemplo en el main.cpp que te ha creado el diseñador con el form principal.
Jajaja, esto es de locos, he hecho algo parecido, ya que cuando en el formulario principal le doy al botón me crea otro formulario igual... [tomaaa]

#include <qapplication.h>
#include "form1.h"

int main( int argc, char ** argv )
{
    QApplication a( argc, argv );
    Form1 w;
    w.show();
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    return a.exec();
}


void Form1::pushButton1_clicked()
{
    Form1 *Form2 = new Form1();
    Form2->show();
}


Se que te vas a reir de mi, pero a veces me cuesta coger las cosas... [buuuaaaa]
Estás instanciando el mismo Form1, sólo que con distinto nombre. Hazme caso, repasa el C++ antes de nada ;)

Si el otro form lo llamaste Form2, lo instanciarías y mostrarías:

Form2 *f = new Form2();
f->show();
Siiiiii, eso es lo que yo entendí, pero es que la clase Form2 no está creada...porque no está en el main, la que crea es la del Form1...
Si tienes un segundo formulario llamado Form2 claro que está creada. Un formulario no es nada más que un objeto.

En main.cpp te sale Form1, porque es la que has puesto como principal.
¡¡Por fin!!, que tonto soy, eso lo había hecho, lo que apsaba es que me decía que Form2 no estaba declarado, y ahora me he dado cuenta de que era porque no hacía el #include "form2.h"....bueno es verdad que tengo que darle un repasillo a C++ por estos fallos no son normales...

Muchas gracias y perdona las molestias tontas [tomaaa]

Saludos [oki]
Alguien sabe cómo se puede hacer con QtDesigner para añadir imagenes o bitmap en una ventana?
He estado navegando un poco por la jerarquia de clases pero tampoco quisiera tener que escribir todo a nivel de código, no hay alguna forma de hacerlo cómo con los botones?
Gracias
Se hace con una QLabel si solo quieres poner una imágen. Si quieres dibujar en cualquier widget tendrás que hacerlo con código.
Buenas

Estamos luchando con Qt pero nos hemos dado cuenta que no salen los tipicos controles que aparecen en la ventana superior en la margen derecha como Minimizar, Maximizar y Cerrar.

Gracias
25 respuestas