Crear aplicación basada en "módulos"

Iniciado por Alitohq, 26 Julio 2012, 21:52 PM

0 Miembros y 3 Visitantes están viendo este tema.

Alitohq

Hola a todo el mundo, primer post y ya vengo a romper los huevos.

Quería saber si alguien que esté bien en tema podría tirarme una linea.

Estoy en Qt, un framework de C++, y me gustaría diseñar una aplicación "genérica" o dinámica, que levante módulos que yo desarrollé.

Básicamente, tengo una aplicación que, cuando se ejecuta, lee un XML el cual le dice que módulos hay instalados, y el path donde están instalados. En base a eso, genera una cantidad n de botones (Tantos botones como módulos haya descriptos en el XML).

Esa es la parte boluda, lo complicado ahora es que no tengo pálida idea de como desarrollar esos "módulos".

Hasta ahora tengo dos jueguitos pedorros con QGL (una abstracción de OpenGL de Qt), un Tetris y un Snake. Ambos dos son aplicaciones ejecutables en si mismas (.exe). Me gustaría que en vez de tener .EXEs, tener alguna otra forma de compilarlos, y poder utilizarlos como módulos para la primer aplicación genérica, la que crea botones en base al XML.

Cómo debería encarar el proyecto? Si fuese todo "estatico" en la aplicación ppal, simplemente hago unas DLL y después instancio mis juegos cuando me viene en gana, pero como todo esto es para poder hacer una aplicación "dinámica", no tiene sentido que rebuildeé la app principal cada vez que quito y agrego un juego nuevo.

Cómo encararian uds el diseño de esta app? Cómo funcionan los ADD-ONs en cosas como Firefox o Visual Studio? Yo no quiero que mi Tetris y Snake sean apps independientes, sino que sean extensiones de esa app principal... y no sé como hacerlo.

Alguna idea o recomendación como para empezar a guiarme?

Desde ya, si no fui claro, redacté como el orto, no fui claro (de vuelta), no fui claro o NFC, díganme. Cualquier ayuda se agradece.

Un saludo.

overxfl0w13

#1
No lo he entendido muy bien, pero si no me equivoco quieres tipo una ventana con botones que lancen los ejecutables ya creados por ti para que éstas no sean independientes no?.

No hace falta calentarse tanto la cabeza ni xml si lo que quieres es eso, crea un widget normal con una cantidad de botones determinada, al conocer la cantidad de aplicaciones y que cada botón ejecute las app's con system() por ejemplo.

De todas formas me reitero, no te he entendido muy bien y si no es ésto lo que quieres esperemos a alguien que lo comprenda  :xD

EDIT: Lo quieres dinámico y no tener que estar recodeando la app principal vale, puedes probar algo así:

Código (cpp) [Seleccionar]

#include <QtGui>

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QWidget *window;
   QVBoxLayout *mainLayout = new QVBoxLayout;
   int contador = 0;
   while(contador<=nºappsenxml) // mientras contador sea menor o igual que la cantidad de apps escritas en el xml
   {
       QPushButton boton = new QPushButton(nombreapp[contador]); // crea botones nuevos con el nombre registrado en el xml
       mainLayout->addWIdget(boton);
       contador += 1;
   }
   window->setLayout(mainLayout);
   window->show();
   return a.exec();
}


Yo de XML no tengo ni idea, por eso te he puesto 2 variables que no pintan nada, además el code no tiene ni pies ni cabeza pero para que te hagas una idea, por ejemplo en el xml declaras una lista con diferentes aplicaciones,siendo nºappsenxml la cantidad de aplicaciones de la lista y nombreapp el nombre de la lista que contiene el nombres de las aplicaciones. En el bucle vas creando nuevos botones con el nombre de la lista y el index contador.

No sé yo si me he explicado bien pero es todo lo que he entendido de tu extenso mensaje. Un saludo y espero que te sirva :)

[/url]

Alitohq

Cita de: overxfl0w13 en 26 Julio 2012, 22:15 PM
No lo he entendido muy bien, pero si no me equivoco quieres tipo una ventana con botones que lancen los ejecutables ya creados por ti para que éstas no sean independientes no?.
Algo así. El punto es que no quiero que sean ejecutables independientes (dicho de manera simple, no quiero poder acceder al folder, darle doble click, y que corran los juegos). Entonces pregunto si hay que compilar de otra manera o algo, porque no tengo ni idea. Por eso citaba a las extensiones y plugins, que generalmente en si no tienen .exes, sino que son interpretados por la app principal y extienden esa funcionalidad adecuadamente.

Cita de: overxfl0w13 en 26 Julio 2012, 22:15 PM
No hace falta calentarse tanto la cabeza ni xml si lo que quieres es eso, crea un widget normal con una cantidad de botones determinada, al conocer la cantidad de aplicaciones y que cada botón ejecute las app's con system() por ejemplo.

Es que el punto es que yo quiero no necesitar saber cuantos módulos voy a tener. Yo quiero que se generen tantos botones como módulos diga el XML que hay instalados (ya como handlear si el path a dichos modulos es valido o no, etc, es ooootro tema y es menor, no me preocupa por ahora).

Cita de: overxfl0w13 en 26 Julio 2012, 22:15 PM
EDIT: Lo quieres dinámico y no tener que estar recodeando la app principal vale, puedes probar algo así:

Código (cpp) [Seleccionar]

#include <QtGui>

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QWidget *window;
   QVBoxLayout *mainLayout = new QVBoxLayout;
   int contador = 0;
   while(contador<=nºappsenxml) // mientras contador sea menor o igual que la cantidad de apps escritas en el xml
   {
       QPushButton boton = new QPushButton(nombreapp[contador]); // crea botones nuevos con el nombre registrado en el xml
       mainLayout->addWIdget(boton);
       contador += 1;
   }
   window->setLayout(mainLayout);
   window->show();
   return a.exec();
}




Tengo algo MUY similar a eso, sí. Pero esa es la parte facil, la que ya está hecha, que es el generar botones dinamicamente. AHora quiero que esos botones disparen los módulos.

Cita de: overxfl0w13 en 26 Julio 2012, 22:15 PMNo sé yo si me he explicado bien pero es todo lo que he entendido de tu extenso mensaje. Un saludo y espero que te sirva :)

Se entiende, sí. Parece ser que soy yo el que no sabe expresarse bien, porque eso fue, justamente, lo que dije que ya tenia hecho. =p

Igual sí, no te preocupes que entendí perfecto tu ejemplo. Lástima que no era lo que preguntaba. ='(

Y sólo para aclarar, mi duda no es con XML, sino con C++/Qt y como compilar/generar dichos módulos. Y como luego ejecutarlos desde la app principal.

overxfl0w13

#3
Para lanzar los módulos crea slots para cada boton y que cada slot maneje uno, pero surge otro problema y es que los slots tienes que declararlos tú, perdiendo dinamicidad y teniendo que modificar el code para cada ejecutable...

Así que no sé me ocurre la manera de hacer lo que quieres, siento no poder ayudarte.

Un saludo  :)
[/url]

Alitohq

El punto tampoco es el connect. Mi pregunta es específicamente de arquitectura / compilación / C++, no de Qt.