Procesarea Qt a tastelor

QT: manipularea intrărilor de la tastatură

Se pare că întrebarea obișnuită. dar a ridicat întrebări astăzi. Dacă da, voi arunca un exemplu de memorie.

În principiu, este suficient să moșteniți de la QWidget în aplicația dvs. (widget) și să implementați metoda keyPressEvent în cadrul evenimentelor de manipulare a codurilor de la tastatură.







De fapt, QWidget are mult mai mult, doar Qt - nu Studio sau Builder, nu întotdeauna evenimentul necesar "este în listă":

  • paintEvent () apare atunci când este nevoie să redrafli widget-ul. Orice widget care afișează conținut generat de utilizator trebuie să-l implementeze într-un astfel de dispozitiv. Redrawarea folosind QPainter. poate apărea numai în paintEvent () sau în funcțiile numite de la paintEvent ().
  • resizeEvent () apare atunci când widget-ul este redimensionat.
  • mousePressEvent () apare atunci când butonul mouse-ului este apăsat în momentul în care mouse-ul a fost în interiorul widget-ului sau în cazul în care el a capturat prin intermediul mouse-ului grabMouse (). Făcând clic fără a elibera butonul mouse-ului este de fapt același lucru cu apelarea grabMouse ().
  • mouseReleaseEvent () apare când butonul mouse-ului este eliberat. Widget-ul va primi evenimentul de eliberare a butonului mouse-ului, dacă anterior a primit evenimentul făcând clic pe butonul mouse-ului. Acest lucru înseamnă că utilizatorul Ousley a făcut clic pe butonul mouse-ului în interiorul widget-ul, apoi mutați mouse-ul undeva și acolo a lansat butonul, widget-ul va primi evenimentul de eliberare. Există o excepție: dacă apare un meniu pop-up când se face clic pe buton, acesta captează imediat evenimentele de pe mouse.
  • mouseDoubleClickEvent () apare atunci când utilizatorul face dublu clic pe widget. În cazul în care utilizatorul folosește un dublu-clic, widget-ul va primi evenimentul faceți clic pe butonul, evenimentul eliberați butonul și încheierea evenimentului cu privire la al doilea clic (mai multe evenimente privind mișcarea mouse-ului poate veni, în cazul în care utilizatorul nu este ținut în loc pe brațul în timpul intervenției chirurgicale). Este imposibil să distingem un singur clic de un dublu clic până când există un al doilea clic. Acesta este unul dintre motivele pentru o mulțime de cărți despre dezvoltarea interfeței cu utilizatorul se recomandă dublu-clic a fost preferat peste single, la comutarea între diferitele operații.






Widgeturile care permit intrarea de la tastatură, trebuie să redefiniți mai multe funcții:
  • () apare când tasta a fost apăsată și, din nou, când tasta este apăsată pentru repetare automată. Apăsând tasta Tab și combinația Shift + Tab este trecută la widget numai dacă nu utilizează mecanismul de schimbare a focalizării. Pentru a intercepta apăsarea acestor taste, trebuie să redefiniți QWidget :: event ().
  • focusInEvent () apare când widget-ul primește focalizare de intrare de la tastatură (dacă ați sunat setFocusPolicy ()). Gadgeturile bine scrise arată că au primit focalizarea de la tastatură într-o formă clară și simplă.
  • focusOutEvent () apare atunci când widgetul pierde focalizarea tastaturii.
Este posibil să trebuiască să înlocuiți unele dintre cele mai puțin frecvente agenți de procesare a evenimentelor:
  • mouseMoveEvent () apare atunci când mouse-ul se mișcă cu butonul apăsat. Acest lucru poate fi util atunci când efectuați o operație de tragere și plasare. Dacă ați sunat setMouseTracking (true). veți primi evenimente de mișcare a mouse-ului chiar dacă butonul nu este apăsat.
  • keyReleaseEvent () apare atunci când cheia este eliberată și în timp ce aceasta este apăsată (dacă aceasta este o tastă de repetare automată). În acest caz, widgetul va primi două evenimente despre eliberarea și apăsarea unei taste pentru fiecare încercare. Apăsând tasta Tab și combinația Shift + Tab este trecută la widget numai dacă nu utilizează mecanismul de schimbare a focalizării. Pentru a intercepta apăsarea acestor taste, trebuie să redefiniți QWidget :: event ().
  • wheelEvent () apare dacă utilizatorul rotește rotița mouse-ului în timp ce widgetul a fost focalizat.
  • enterEvent () apare atunci când mouse-ul intră în spațiul ocupat de widget-ul de pe ecran (cu excepția spațiului ocupat de widget-uri pentru copii).
  • leaveEvent () apare când mouse-ul părăsește spațiul widget-ului. Când mouse-ul intră în spațiul ocupat de widget-ul copil, evenimentul leaveEvent () nu are loc.
  • moveEvent () apare atunci când widgetul se mișcă în raport cu părintele său.
  • closeEvent () apare când utilizatorul închide widgetul (sau când se apelează funcția close ()).

Ei bine, există încă orice exotică pe care o vom pierde.

Iată un exemplu. Widget are marca QLabel pe toate ferestrei lui, și putem intra în ea cu număr întreg de tastatură, a pus în fața lui un „-“ sau „+“ pentru a șterge ultimul caracter, apăsând pe backspace toate apăsând Delete. Lungimea maximă a intrării este limitată la 16 caractere.

Fișierul principal.cpp
Fișierul Widget.h
Fișierul widget.cpp






Articole similare

Trimiteți-le prietenilor: