- All (478)
- jom (0)
- Qt Linguist (7)
- Qt Eclipse Integration (9)
- Qt Designer (7)
- Qt Creator (4)
- Qt build system: qmake (31)
- Qt build system: configure (3)
- Qt Assistant (5)
- Printing (4)
- Porting from Qt 3 to Qt 4 (1)
- Plugins (7)
- Qt Visual Studio AddIn (2)
- Qt/MFC Migration (2)
- QtScript (3)
- MDI (2)
- XML (1)
- Widgets (22)
- WebKit (5)
- Tools and Containers (2)
- Threads (2)
- Text Handling (10)
- SQL (6)
- QtTest (1)
- QtService (1)
- Platform: Windows (49)
- Platform: Unix (16)
- Platform: Mac OS X (18)
- Image Formats (2)
- I/O (2)
- Graphicsview (8)
- Font handling (9)
- Event System (18)
- Drag and Drop (4)
- Dialogs (6)
- Desktop integration (3)
- ActiveQt (3)
- Itemviews (60)
- Layout (4)
- Qt Quick (10)
- Qt SDK (1)
- Licensing (2)
- Platform: Embedded Linux (38)
- Painting (32)
- OpenGL (4)
- Object Model (6)
- Network (5)
- Multimedia (3)
- Miscellanous (23)
- Main Window (19)
- Look and Feel (23)
- Development (0)
- Getting Involved (0)
- Routines (0)
When keeping a key pressed down, then I receive a number of keyReleaseEvents() in addition to keyPressEvents(). Why is this happening and what can be done to only get a mousePressEvent() ?
When a given key is continuously pressed it results in a continuous stream of events for the associated key. You will get both keyPressEvents() [doc.qt.nokia.com] and keyReleaseEvents() [doc.qt.nokia.com] for the relevant key even if you have not released the key. You can not stop the events from being sent since they come directly from the windowing system. What you can do however is to check the autoRepeat() [qt.nokia.com] function in your key event handler and just ignore the key event if it was generated by an auto-repeating key.
See the following example for an illustration:
- #include <QtGui>
- {
- public:
- Widget()
- {
- }
- {
- if(event->isAutoRepeat() ) {
- qDebug() << "keyPressEvent ignore";
- event->ignore();
- } else {
- qDebug() << "keyPressEvent accept";
- event->accept();
- }
- }
- {
- if(event->isAutoRepeat() ) {
- qDebug() << "keyReleaseEvent ignore";
- event->ignore();
- } else {
- qDebug() << "keyReleaseEvent accept";
- event->accept();
- }
- }
- };
- int main(int argc, char **argv)
- {
- Widget box;
- box.show();
- return app.exec();
- }

No comments