Domanda

Sono nuovo alla programmazione Qt GUI e sto usando QT Creator. Il problema che sto vedendo è con il mio pulsante e la riga modifica quando l'utente preme il tasto ENTER. Il mio programma apre una cassetta di gruppo e consente all'utente di inserire una password e premere OK o Annulla.

Se l'utente preme il tasto ENTER Quando la modifica della riga è stata messa a fuoco, il programma sembra emettere un secondo segnale per QabStractButton animateClick(); in modo che la casella di gruppo successiva si apre e richiede all'utente di premere OK o Annulla, il programma continua come se L'utente ha premuto il pulsante OK.

I Configura i miei pulsanti per consentire all'utente di premere il tasto Tab e premere il tasto ENTER. Per ottenere questa funzionalità ho impostato Okbutton-> setAutodefault(true); e AnnullaButton-> setAutodefault(true);

Ho anche un lineedit per l'utente per inserire una password e premere INVIO. L'ho impostato collegando il segnale di ritorno pressato al pulsante OK mostrato di seguito.

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

Ho anche provato a connettere il segnale pressato di ritorno direttamente allo slot ma si verifica ancora il problema.

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

Se l'utente fa clic sull'OkButton con il mouse o impostato OKButton-> setAutoDefault(false); Le funzioni del programma come dovrebbero. Mi piacerebbe sapere se è possibile disabilitare il segnale AnimateClick che si verifica quando la modifica della linea ha focus.

Qualsiasi aiuto con questo sarebbe molto apprezzato.

È stato utile?

Soluzione

Prova a collegare mai lineEdit con il okButton, I.e. Commenta questa riga nel tuo codice:

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

e controlla se il programma si comporta come vuoi.


.

Inoltre, potresti voler chiamare

okButton->setDefault(true);
.

Oltre alle chiamate setAutoDefault() su entrambi i pulsanti, a seconda di cosa si desidera accadere esattamente quando l'utente preme immettere con varie cose a fuoco. Vedi Questa risposta per ulteriori informazioni su questo argomento.


.

Presumo, dal momento che non lo menziona mai, che non chiami setDefault() per nessuno dei pulsanti. Pertanto, okButton è il tuo primo pulsante con la proprietà autoDefault Set su true. Ciò significa che okButton diventa il "pulsante di scelta" del dialogo ogni volta che la finestra di dialogo deve gestire un tasto Immettere l'espresso del tasto che non è accaduto su un altro pulsante autoDefault (come cancelButton nel tuo caso).

Ogni volta che qualsiasi widget nella finestra di dialogo riceve un immettere il tasto press e non consuma l'evento stesso, l'evento finisce per essere gestito dalla logica di gestione del tasto predefinito della finestra di dialogo, che si traduce in un clic sul sopra menzionato "pulsante di scelta".

QLineEdit non è utilizzato per la modifica multi-line, quindi probabilmente non consuma il tasto Premere Event per Inserisci (mentre si sta ancora maneggiando, in quanto invia il segnale returnPressed()). Pertanto, la tua connessione di returnPressed() finisce per fare tutto ciò che sta facendo, e, Inoltre , la logica del pulsante predefinita finisce facendo clic sul pulsante una seconda volta.

ANCHE DETEGGI Questo thread sui forum del progetto QT che sembra risolvere il lo stesso problema in modo diverso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top