Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Qt e impresora de tickets

Estas en el tema de Qt e impresora de tickets en el foro de C/C++ en Foros del Web. Hola Estoy tratando imprimir en una impresora de tickets desde Qt, pero no lo consigo. La impresora está configurada como "Generic / Text Only" (en ...
  #1 (permalink)  
Antiguo 06/04/2015, 10:58
Avatar de jc_moj  
Fecha de Ingreso: septiembre-2009
Ubicación: Andalucía
Mensajes: 137
Antigüedad: 15 años, 2 meses
Puntos: 12
Qt e impresora de tickets

Hola

Estoy tratando imprimir en una impresora de tickets desde Qt, pero no lo consigo. La impresora está configurada como "Generic / Text Only" (en windows, claro).

Necesito enviarles unos textos sencillos, por ejemplo, usando C++:
Código C++:
Ver original
  1. std::ofstream impresora("lpt1");
  2.  
  3. impresora << "hola mundo\n";
  4. impresora << "Fin del texto\n\n";
  5.  
  6. impresora.close();

Eso es suficiente, pero no logro hacerlo usando las cases de Qt.

¿Y por qué no usar el método anterior? Bueno, en el programa tengo una ventana de configuración en la que muestro la lista de impresoras instaladas, para usar éste método tendría que mostrar una lista de puertos, lo que me va a confundir y hacer que me llamen las chicas que trabajan en la tienda XD

También valdría si pudiese obtener el puerto al que está conectada una impresora, pero tampoco veo un método en las clases QPrinter o QPrinterInfo que me de esa información.

Pues eso. Cómo envío texto a una impresora de tickets o cómo obtengo el puerto al que está conectada, usando Qt.

Un saludo
  #2 (permalink)  
Antiguo 07/04/2015, 00:51
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Qt e impresora de tickets

Una impresora es... pues eso, una impresora. Da igual si la impresora es de tickets o de toner, o de agujas... da igual... para tu ordenador es una impresora. Claro, como todas las impresoras se engloban en la misma categoría tienes el problema de que hay que asignar una identificación única a cada una... ¿qué pasa si un equipo tiene dos impresoras iguales? ¿y si tienes que sustituir una impresora por otra que es de una marca diferente? Queda claro que no parece buena idea forzar a que la identificación de la impresora esté implementado en plan "hardcore" en el código fuente.

La solución que yo te propongo es, utilizar el diálogo de selección de impresoras de Qt para elegir la impresora determinada y guardar su identificador en un archivo de configuración para no tener que repetir el proceso cada vez que se abra el programa... algo simple y rápido.

Otra opción puede ser definir, en base a los nombres de las impresoras, una lista de impresoras permitidas, impidiendo el uso del resto (esta opción es quizás un poco más bizarra y problemática)

Un saludo.
  #3 (permalink)  
Antiguo 07/04/2015, 03:04
Avatar de jc_moj  
Fecha de Ingreso: septiembre-2009
Ubicación: Andalucía
Mensajes: 137
Antigüedad: 15 años, 2 meses
Puntos: 12
Respuesta: Qt e impresora de tickets

Hola

Cita:
Iniciado por eferion Ver Mensaje
La solución que yo te propongo es, utilizar el diálogo de selección de impresoras de Qt para elegir la impresora determinada y guardar su identificador en un archivo de configuración para no tener que repetir el proceso cada vez que se abra el programa... algo simple y rápido.
Lo que estoy haciendo es mostrar, en una ventana que uso para configurar el programa, un QComboBox con la lista de impresoras instaladas (QPrinterInfo::availablePrinterNames()) y la que se escoja ahí, se guarda en el archivo de configuración y siempre uso esa.

Pero claro, se guarda el nombre, y ¿Cómo obtengo el puerto al que está conectada para usar el código que puse antes? No encuentro ningún método en las clases de Qt que me lo diga. En principio pensaba que se podía obtener con el método QPrinterInfo::location(), pero siempre me devuelve una cadena vacía

Por que si trato de hacerlo con un objeto QPrinter y un QPainter, imprime, sí, pero no logro que lo haga bien, para empezar, por defecto me toma el tamaño de página como un A4. Estoy tratando de configurar a mano todos los parámetros de la página, pero de momento se me resiste

Un saludo
  #4 (permalink)  
Antiguo 07/04/2015, 03:13
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Qt e impresora de tickets

QPrinterInfo tiene un método estático llamado availablePrinters. Este método te devuelve una lista de QPrinterInfo, donde cada elemento de la lista representa una impresora.

Si iteras el vector y a cada elemento le preguntas por su printerName, deberías ser capaz de localizar la impresora que coincida con el nombre que estás buscando.

Una vez tienes el QPrinterInfo buscado, creas el objeto QPrinter correspondiente:

Código C++:
Ver original
  1. QPrinter printer( printerInfo );

Y listo, ya está todo preparado para imprimir.

PD.: El constructor de QPrinter tiene la siguiente firma: QPrinter(const QPrinterInfo & printer, PrinterMode mode = ScreenResolution).

Además, PrinterMode tiene los siguientes valores: enum PrinterMode { ScreenResolution, PrinterResolution, HighResolution }

Imagino que tu necesitas usar "PrinterResolution" para imprimir en la impresora de tickets.

Un saludo
  #5 (permalink)  
Antiguo 07/04/2015, 05:52
Avatar de jc_moj  
Fecha de Ingreso: septiembre-2009
Ubicación: Andalucía
Mensajes: 137
Antigüedad: 15 años, 2 meses
Puntos: 12
Respuesta: Qt e impresora de tickets

Hola

Cita:
Iniciado por eferion Ver Mensaje
QPrinterInfo tiene un método estático llamado availablePrinters. Este método te devuelve una lista de QPrinterInfo, donde cada elemento de la lista representa una impresora.

Si iteras el vector y a cada elemento le preguntas por su printerName, deberías ser capaz de localizar la impresora que coincida con el nombre que estás buscando...
Exactamente, ese es el procedimiento, pero no, no funciona, bueno, sí imprime, pero mal, el texto lo corta en dos líneas, en la primera imprime el final de la cadena y en la segunda el principio, con algunos caracteres sobrescritos.

Al final he instalado los drivers de la impresora y ¡¡funciona!! Así que supongo que el problema es que configurada como "Generic / Text Only" Qt no es capaz de obtener la configuración de la impresora.

De todas formas no es lo que quiero, pues de esta forma se imprime más lento, ya que, no sé como expresarlo, es como si "dibujara" las letras.

No sé si se podrá resolver con un QPageLayout en el que indicar todos los parámetros de la página. Seguiré en ello.

Un saludo

Etiquetas: impresora, programa, tickets
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:36.