Qt en Español

Qt en Español es una comunidad de usuarios para aprender a Programar usando las librerias Qt

Buscar
 
 

Resultados por:
 


Rechercher Búsqueda avanzada

Últimos temas
» Desaparecen objetos del formulario al usar showMaximized()
Sáb Sep 13, 2014 9:54 pm por ljimenez29

» visivilidad de controles
Dom Mayo 18, 2014 5:04 pm por solitarywolf

» Error QT (y no sé que más poner ¬¬)
Jue Sep 26, 2013 4:02 pm por Anónimo

» QT, VTK en VS 2008 C++
Jue Abr 11, 2013 5:19 pm por monicadiaz

» [Ayuda]Programa en PyQt4 en modo Pantalla completa
Sáb Mar 30, 2013 8:56 pm por fortil

» SIGNAL y SLOT
Sáb Mar 02, 2013 5:11 pm por loloqt

» Qt creator 5.0.1 en Windows 8...."Qt creator needs a compiler set up to build. Configure a compiler in the kit options"
Miér Feb 27, 2013 4:23 pm por caliche

» mi aplicacion no me lee la base de datos
Jue Oct 18, 2012 1:55 pm por jldiaz

» QT.Para G19 de Logitech
Dom Oct 14, 2012 3:00 am por novax1

Navegación
 Portal
 Índice
 Miembros
 Perfil
 FAQ
 Buscar
Compañeros
Crear foro
Sondeo

Que nombre te gustaria que se llamara el foro?

27% 27% [ 6 ]
18% 18% [ 4 ]
0% 0% [ 0 ]
55% 55% [ 12 ]

Votos Totales : 22


No estás conectado. Conéctate o registrate

Teclado Virtual

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

1 Teclado Virtual el Dom Abr 18, 2010 6:24 am

Hola saludos, Me llamo Gerard, este es el primer post que hago, aquí va la duda:

Estoy realizando un chat para un dispositivo con pantalla táctil y me falta el teclado virtual (matriz de QPushButtons) , pero no sé como las teclas pulsadas hacia el QLineEdit determinado de cada pestanya de usuario (ya que pueden haber muchos QLineEdits, uno por usuario).

Cada conversación actual con un usuario se muestra a través de una pestaña. Esta pestaña contiene un QTextEdit por donde se muestra la conversación mantenida y el QLineEdit por donde escribes.

Por decirlo de alguna otra manera, no se como enviar las teclas pulsadas en el QLineEdit "ACTIVO" o "en uso"

He mirado QTApps, he encontrado teclados virtuales pero no me compilan y tienen un código bastante complicado de entender para mi nivel. He mirado su código y utilizan funciones tales como FocusInEvent, o FocusOutEvent, me huelo que por ahí van los tiros... pero conceptualmente no tengo ni idea de que son...

Si alguien me pudiera dar algo de luz se lo agradecería


Muchas Gracias

Un Saludo

Ver perfil de usuario

2 Sugerencia el Dom Abr 18, 2010 6:43 pm

Hola Gerard:
Como indica el titulo, no creo darte una solución, mas bien yo la llamaría una sugerencia.
Me parece que lo que tu tienes es un problema de manejo de información, no de programación. Deberías armar mejor la estructura interna de tu programa.
Un ejemplo para aclarar la idea:
Por cada usuario que inicia una sesión chat o por cada conversación que inicia el usuario, yo retendría cierta información que luego me va ser útil, por ej. el nombre de usuario, un puntero al QLineEdit donde escribiría, un puntero a la pestaña, etc. Con esto armaría una lista de las conversaciones activas.
Cuando seleccionen un tab una de estas estructuras pasaría a ser la activa y podría mandar mensajes y llamar a funciones de los distintos componentes de la estructura.
Hablando en código: armaría una clase para retener la información:
Código:

class algo
{
QString usuario;
QLineEdit * editor;
//otros....
}
Podrías usar QList para almacenar la lista de conversaciones activas, u otra estructura.
Cuando se seleccione el tab indice x, selecciona el indice x de tu QList. (Esta es una técnica de selección, existen otras).
Cuando presionan un botón del teclado virtual, armas una QString con la letra correspondiente y se la agregas al QLineEdit.
Código:

// cadBotonPresionado seria la QString generada por el botón del teclado virtual
QString cad = algo->editor.text() + cadBotonPresionado;
algo->editor.setText(cad)
Puedes ver en la documentación de QString como mejorar el comportamiento de la concatenación
La idea, como veras es bastante rustica, tendrás que trabajarla bastante.
La clase se puede ampliar bastante como para contemplar otras opciones como estado del usuario, imagen, fuentes personalizadas, colores, y un largo etc.
Espero que te sirva la idea y no haber entendido mal tu problema.
Saludos

Ver perfil de usuario

3 Re: Teclado Virtual el Dom Abr 18, 2010 11:52 pm

Hola Gerard convendría que dieras más detalles sobre tu aplicación para descartar cualquier problema como el que menciona adrimag.

Aunque yo creo que sí tiene que ver con el componente que este activo/enfocado, ya que es común que los teclados virtuales sean un widget/ventana independiente de la aplicación; Debido a esto el componente de texto (QLineEdit, QTextEdit) pierde el foco cuando se presiona un botón del teclado virtual.

Lo que supongo que hacen los programadores de los teclados virtuales que mencionas es tener una función que se active cada que algún componente de la interfaz pierda el foco, si este componente es un widget para capturar texto entonces guardan una referencia a él, luego cuando alguno de los botones del teclado virtual manda la señal clicked entonces se escribe el caracter correspondiente al botón en el widget al que apunta la referencia que tenemos, la cuál, gracias a la función que te mencioné antes, debe ser el widget sobre cual el usuario quiere escribir.

Es una suposición solamente pero espero te sea útil, revisa más a fondo el FocusInEvent y el FocusOutEvent y también los EventFilters, estos últimos te servirán para la primera parte: instalas un event filter cada que la aplicación registre un FocusOutEvent.

Ver perfil de usuario

4 Re: Teclado Virtual el Miér Abr 21, 2010 9:53 am

Hola de nuevo! al final he hecho mas o menos lo que comentaba adrimag. Para redirigir la señal del QPushButton al QLineEdit determinado he hecho esto:

void presentacion::SLOT_RECEPTOR_DE_TECLAS(QString botton){
for(i=0;i MENORQUE MaxUsuarios;i++){ //pongo MENORQUE pq el simbolo correspondiente no lo muestra
if((usuario[i].logueado()==true)&(usuario[i].esVisible()==true)){
usuario[i].insertaCaracter(botton);
}//finIF
}//finFOR
}//finSLOT



* donde la función "esVisible" es:

bool user::esVisible{
return QLineEditUser->isVisible(); //la clase QLineEdit tiene la función isVisible() que devuelve true si se esta viendo por pantalla
//el widget
}


Igual no es la manera mas elegante de hacerlo pero funciona.


Muchas Gracias adrimag y mkfnx!!

Saludos!

Ver perfil de usuario

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.