Qt feldolgozás karakternél

QT: feldolgozási karakternél

Úgy tűnik, hogy a szokásos kérdés. de kérdés merült fel ma. ha igen, akkor dobja például egy emlék.

Elvileg elegendő az alkalmazás (widgetet) örökölt QWidget és végrehajtja a kódot módszer keyPressEvent - események feldolgozására a billentyűzetről.

Tény, hogy QWidget még egy csomó dolog, csak Qt - nem Studio vagy Builder, nem mindig a kívánt esemény „a listán”:

  • paintEvent () akkor történik, amikor szükség van, hogy átfestés a widget. Bármely widget, amely megjeleníti a felhasználó által generált tartalom, akkor végre kell hajtania a kezelőt. Újrarajzoláskor segítségével QPainter. Ez csak akkor fordul elő paintEvent () vagy funkció hívott paintEvent ().
  • resizeEvent () akkor történik, amikor a widget átméretezi.
  • mousePressEvent () fordul elő, ha az egér gomb megnyomása idején, amikor az egér volt benne a widgetet vagy ha ő készített egérrel grabMouse (). Ha rákattint az egér gombját elengedése nélkül - gyakorlatilag ugyanaz, mint a kihívás grabMouse ().
  • mouseReleaseEvent () jelenik meg, ha az egér gombját lenyomva tartja. A widget kap egy eseményt, ha felengedi az egérgombot, ha azt megelőzően volt egy kattintással esemény. Ez azt jelenti, hogy Ousley felhasználó kattintott az egér gombját belül a modult, majd mozgassa az egeret valahol, és ott elengedte a gombot, akkor a modul megkapja a kibocsátás esetén. Egy kivétel van: ha megnyomja a gombot, a pop-up menü, azonnal elfogják egér eseményeket.
  • mouseDoubleClickEvent () akkor történik, amikor a felhasználó duplán a modulra kattint. Ha a felhasználó egy dupla kattintással, a modul megkapja a gomb click esemény, az esemény akkor engedje el a gombot, és a megkötése esetén a második kattintás (több esemény a mozgás az egér jöhet, ha a felhasználó nem tartja helyén a kar a műtét során). Lehetetlen különbséget tenni kislemez dupla kattintással, amíg a második kattintás fog bekövetkezni. Ez az egyik oka annak, hogy egy csomó könyvet a fejlesztés a felhasználói felület ajánlott dupla kattintás került előnyösebb, mint az egységes, amikor a váltás a különböző műveleteket.
Mi modulokat, amelyek lehetővé teszik bemenet a billentyűzetet, akkor kell felülírni néhány további funkciók:
  • keyPressEvent () akkor történik, amikor megnyom egy gombot, és újra, amikor a gombot lenyomva tartjuk az automatikus ismétlés. A Tab billentyű megnyomása vagy a Shift + Tab kombinációt kulcs továbbítódik, ha a widget nem használja fókuszeltolódást mechanizmus. Hogy elfogják Ezen gombok megnyomásával csorbíthatja a QWidget :: esemény ().
  • focusInEvent () fordul elő, amikor a widget kap fókuszt (ha hívjon setFocusPolicy ()). Jól megírt widgetek azt mutatják, hogy kaptak a fókuszt egy egyértelmű és egyszerű módon.
  • focusOutEvent () jelenik meg a widget veszít billentyűzet fókuszt.
Lehet, hogy újra néhány ritkább eseménykezelőkkel:
  • mouseMoveEvent () akkor, ha az egeret mozgatni a gomb megnyomásakor. Ez hasznos lehet, közben egy húzási művelet. Ha hívja setMouseTracking (igaz). kap egéreseményeket, akkor is, ha nincs lenyomva.
  • keyReleaseEvent () akkor beszélünk, ha a gombot elengedi, és megnyomja (ha kulcs autorepeat). Ebben az esetben a modul megkapja a két esemény mintegy elengedte és billenytûkombinációkat egyes ismétlés. A Tab billentyű megnyomása vagy a Shift + Tab kombinációt kulcs továbbítódik, ha a widget nem használja fókuszeltolódást mechanizmus. Hogy elfogják Ezen gombok megnyomásával csorbíthatja a QWidget :: esemény ().
  • wheelEvent () akkor történik, amikor a felhasználó elfordítja az egér kerék, míg a widget összpontosítani.
  • enterEvent () jelenik meg, amikor az egér belép a helyet foglalja el a widget a képernyőn (kivéve az elfoglalt terület gyerek) elemet.
  • leaveEvent () akkor beszélünk, ha az egér elhagyja a területet a widget. Amikor egy egér belép a helyet foglalja el a gyermek widget leaveEvent () esemény bekövetkezik.
  • moveEvent () akkor történik, amikor a widget viszonyítva mozgatjuk annak szülő.
  • closeEvent () akkor történik, amikor a felhasználó bezárja a modulban (vagy, ha a funkció az úgynevezett közeli ()).

Nos, van minden egzotikus, hogy kimaradt.

Itt egy példa. Widget QLabel jel minden az ablakon, és tudjuk be azt billentyűzet egész, fel előtte a „-” vagy „+” törli az utolsó karaktert megnyomásával BackSpace vagy törli az összes gomb megnyomásával törlése. A maximális hossza bemeneti szimbólumok 16 korlátozott.

main.cpp fájl
widget.h fájl
widget.cpp fájl

Kapcsolódó cikkek