Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Alitohq

#1
Tengo una impresora que puede imprimir código de barras.

Tengo, por otro lado, que leer un archivo (binario) que es el que tiene el texto más otros bytes (especiales, de impresión, como por ejemplo el caracter que determina que 'empieza un codigo de barras').

Quiero leer el archivo, levantarlo a un stream, parsear esos bytes y buscar, por ejemplo, ese byte que determina cuando empieza un codigo de barra (en mi protocolo es 0x14) y reemplazarlo por otros 3 bytes que son los que realmente usa la impresora que tengo en este momento.

Mi problema (pongo el codigo al final) es que si el archivo lo levanto del disco, no lo toco, Y LO MANDO INMEDIATAMENTE A IMPRESORA, el código de barras se imprime perfecto (lo mismo si uso, por ejemplo, en el command promt: print c:\test lpt).
Ahora, si lo que quiero es empezar a editar el contenido del archivo para poner los bytes que corresponden, cuando los mando a la impresora, me termina imprimiendo texto en vez del código de barras..


    static void ImprimirArchivo(unsigned char* path)
    {
        std::ifstream input((char*)path, std::ios::binary);
        std::ofstream output("lpt1", std::ios::binary);

        std::istreambuf_iterator<char> eos;
        std::istreambuf_iterator<char> streamInputIterator (input.rdbuf());

        bool codeBarStarted = false;
        int iterationsCounter = 0;
        while(streamInputIterator!=eos)
        {
            if(*streamInputIterator == 0x14)
            {
                output << '1d';
                output << '6b';
                output << '05';
                codeBarStarted = true;
            }
            else
            {
                output << *streamInputIterator;
            }

            if(codeBarStarted)
            {
                iterationsCounter++;
                if(iterationsCounter == 10)
                {
                    output << 0x00;
                    codeBarStarted = false;
                    iterationsCounter = 0;
                }
            }

            streamInputIterator++;
        }


por otro lado, en la parte de

            if(*streamInputIterator == 0x14)
            {
                output << '1d';
                output << '6b';
                output << '05';
                codeBarStarted = true;
            }

si lo cambio por

            if(*streamInputIterator == 0x14)
            {
                output << 0x1d;
                output << 0x6b;
                output << 0x05;
                codeBarStarted = true;
            }


el resultado es radicalmente distinto. En el segundo caso (0xYZ), sale impreso ese valor como un numero en formato texto (ejemplo: donde dice 0x1d, sale impreso '29')

Alguien tiene alguna idea de por qué no estoy pudiendo hacer esto que quiero? CUALQUIER pista es agradecida, porque estoy perdidísimo.
#3
El punto tampoco es el connect. Mi pregunta es específicamente de arquitectura / compilación / C++, no de Qt.
#4
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.
#5
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.