Pregunta

Soy nuevo en QT GUI de la programación y estoy usando QT Creator.El problema que yo veo es con mi pulsador y la línea de edición cuando el usuario presiona la tecla enter.Mi programa se abre un cuadro de grupo y permite que el usuario introduzca una contraseña y pulse en aceptar o en cancelar.

Si el usuario presiona la tecla enter cuando la línea de edición tiene el foco, el programa parece emitir una segunda señal para QAbstractButton animateClick(); Así que cuando el grupo siguiente cuadro se abre y se pide al usuario que pulse aceptar o cancelar, el programa continúa como si el usuario pulsa el botón aceptar.

Puedo configurar mi los botones para permitir que el usuario presione la tecla tab y pulse la tecla enter.Para obtener esta funcionalidad me puse okbutton->setAutodefault(true); y cancelButton->setAutodefault(true);

También tengo un lineEdit para que el usuario introduzca una contraseña y pulse entrar.Voy a poner esto por la conexión de la devolución pulsa la señal para el botón aceptar se muestra a continuación.

connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));

También he probado a conectar el retorno pulsa la señal directamente a la ranura, pero el problema persiste.

connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(chkPassword()));

Si el usuario hace clic en el okButton con el ratón o me puse okButton->setAutoDefault(false); el programa funciona como debería.Me gustaría saber si es posible desactivar la animateClick de la señal que se produce cuando la línea de edición tiene el foco.

Cualquier ayuda con esto sería muy apreciado.

¿Fue útil?

Solución

Intente nunca conecta lineEdit con el okButton, es decir,comentar la siguiente línea en el código:

connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));

y comprobar si el programa se comporta como usted desea.


También, puede llamar

okButton->setDefault(true);

además de su setAutoDefault() las llamadas de las dos botones, dependiendo de qué es exactamente lo que desea que ocurra cuando el usuario presiona Entrar con varias cosas en foco.Ver esta respuesta para obtener más información sobre este tema.


Supongo, ya que nunca se menciona, que no llame setDefault() para cualquiera de los botones.Por lo tanto, okButton es el primer botón con el autoDefault la propiedad se establece en true.Esto significa que okButton se convierte en el cuadro de diálogo del "botón de opción" cada vez que el diálogo tiene que manejar un Entrar keypress que no sucede en algunos otros autoDefault botón (tales como cancelButton en tu caso).

Cada vez que cualquier widget en el cuadro de diálogo recibe un Entrar keypress y no consume el evento en sí, el evento termina siendo manejado por el cuadro de diálogo predeterminado del botón de control de lógica, lo que resulta en un clic sobre la mencionada "botón de opción".

QLineEdit no se utiliza para multi-línea de edición, por lo que probablemente sólo no consume la clave del evento de prensa para Entrar (mientras que todavía en su manipulación, en la que se envía salidas de la returnPressed() de la señal).Por lo tanto, la conexión de returnPressed() termina haciendo lo que está haciendo, y, además, el valor predeterminado del botón de la lógica termina de hacer clic en su botón una segunda vez.

También echa un vistazo a este hilo sobre el Qt proyecto de foros que parece resolver el mismo problema de manera diferente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top