Pergunta

Eu sou novo no QT GUI programação e estou usando o QT Creator.O problema que eu estou a ver é com o meu botão de acionamento e edição de linha quando o usuário pressiona a tecla enter.Meu programa abre uma caixa de grupo e permite que o usuário insira uma palavra-passe e prima ok ou cancelar.

Se o usuário pressionar a tecla enter quando a linha de edição tenha o foco, o programa parece emitir um segundo sinal para QAbstractButton animateClick(); Assim, quando o grupo seguinte caixa será aberta e solicitará que o usuário pressione ok ou em cancelar, o programa continua como se o usuário pressionou o botão ok.

Eu configurar meu botões de pressão para permitir que o usuário pressionar a tecla tab e pressione a tecla enter.Para obter esta funcionalidade que eu definir okbutton->setAutodefault(true); e cancelButton->setAutodefault(true);

Eu também tenho um lineEdit para o utilizador introduzir uma palavra-passe e prima enter.Eu por ligar o retorno pressionado sinal para o botão ok mostrado abaixo.

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

Eu também tentei ligar retorno pressionado sinal diretamente para o slot, mas o problema ainda ocorre.

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

Se o usuário clicar okButton com o mouse ou eu definir okButton->setAutoDefault(false); o programa funciona como deveria.Gostaria de saber se é possível desativar o animateClick sinal que ocorre quando a linha de edição tenha o foco.

Qualquer ajuda com isso seria muito apreciado.

Foi útil?

Solução

Tente nunca ligar lineEdit com o okButton, i.é.comente esta linha no seu código:

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

e verificar se o programa se comporta como você quiser.


Além disso, você pode querer chamar

okButton->setDefault(true);

além de seu setAutoDefault() chamadas em ambos os botões, dependendo do que exatamente você quer que aconteça quando o usuário pressiona Entrar com várias coisas em foco.Ver esta resposta para obter mais informações sobre este assunto.


Eu assumo, desde que você nunca mencionou, que você não chame setDefault() para qualquer um dos seus botões.Assim, okButton é o seu primeiro botão com a autoDefault conjunto de propriedades para true.Isto significa que okButton torna-se o diálogo do "botão de opção" sempre que o diálogo tem de lidar com uma Entrar keypress que não acontece com alguns outros autoDefault botão (como cancelButton no seu caso).

Toda vez que qualquer widget no seu diálogo recebe um Entrar keypress e não consuma o evento em si, o evento acaba sendo manipulado pela caixa de diálogo padrão do botão de lógica de processamento, o que resulta em um clique sobre o referido "botão de opção".

QLineEdit não é usada para multi-linha de edição, então provavelmente só não consumir a tecla de eventos para Entrar (enquanto ainda está lidando com ele, em que ele envia o outs returnPressed() sinal).Assim, a sua ligação de returnPressed() acaba fazendo o que ele está fazendo, e, additionaly, o padrão do botão de lógica acaba clicando com o botão uma segunda vez.

Confira também esta discussão sobre o projeto Qt fóruns o que parece resolver o mesmo problema de forma diferente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top