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
» signal desde QThread o sugerencia
Miér Mayo 09, 2012 12:55 pm por warlocksystem

» Problemas Eliminar el ultimo elemento de una lista QSTringList
Sáb Mar 10, 2012 5:14 pm por Lycus HackerEmo

» QML --> como en el qtdemo
Sáb Mar 10, 2012 5:14 pm por Lycus HackerEmo

» Evento OnCLick en un QFrame
Sáb Mar 10, 2012 5:13 pm por Lycus HackerEmo

» Problemas con aplicaciones qt en equipos donde no se encuentra instalado qtCreator
Sáb Mar 10, 2012 5:12 pm por Lycus HackerEmo

» Como hago una conexion a mysql
Sáb Mar 10, 2012 5:11 pm por Lycus HackerEmo

» Un pequeño manual de qt
Vie Feb 10, 2012 11:55 am por josb86

» Trabajo con QTreeWidget
Dom Dic 11, 2011 9:25 pm por DanSH

» Reemplazar cadena QString
Dom Dic 11, 2011 2:39 pm por Lycus HackerEmo

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

Que nombre te gustaria que se llamara el foro?

25% 25% [ 4 ]
19% 19% [ 3 ]
0% 0% [ 0 ]
56% 56% [ 9 ]

Votos Totales : 16


No estás conectado. Conéctate o registrate

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

1 Teclado Virtual el Dom Abr 18, 2010 5: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 5: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 10: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 8: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

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

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