
Originally Posted by
wysota
That's because the line edit consumes the event before it reaches the window object.
I don't understand what you want but if you want to intercept key events before they reach their destinations, you need to use event filters.
I've wrote my event filter, it looks like this:
class KeyboardFilter
: public QObject{
Q_OBJECT
public:
signals:
void up_arrow();
void down_arrow();
void left_arrow();
void right_arrow();
protected:
{
if( event
->type
() == QEvent::KeyPress ) {
QKeyEvent *keyEvent
= static_cast<QKeyEvent
*>
( event
);
if( QString("1234567890").
indexOf( keyEvent
->text
() ) == -1 ) return true;
else if ( keyEvent->key() == Qt::Key_Up ) {emit up_arrow(); return true;}
else if ( keyEvent->key() == Qt::Key_Down ) {emit down_arrow(); return true;}
else if ( keyEvent->key() == Qt::Key_Left ) {emit left_arrow(); return true;}
else if ( keyEvent->key() == Qt::Key_Right ) {emit right_arrow(); return true;}
}
return false;
}
};
class KeyboardFilter : public QObject
{
Q_OBJECT
public:
KeyboardFilter( QObject *parent = 0 ) : QObject( parent ) {}
signals:
void up_arrow();
void down_arrow();
void left_arrow();
void right_arrow();
protected:
bool eventFilter( QObject *dist, QEvent *event )
{
if( event->type() == QEvent::KeyPress )
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>( event );
if( QString("1234567890").indexOf( keyEvent->text() ) == -1 ) return true;
else if ( keyEvent->key() == Qt::Key_Up ) {emit up_arrow(); return true;}
else if ( keyEvent->key() == Qt::Key_Down ) {emit down_arrow(); return true;}
else if ( keyEvent->key() == Qt::Key_Left ) {emit left_arrow(); return true;}
else if ( keyEvent->key() == Qt::Key_Right ) {emit right_arrow(); return true;}
}
return false;
}
};
To copy to clipboard, switch view to plain text mode
Almost everything works fine except Backspace key. How can I make It work in that text field on which that filter is installed?
thanks in advance
best regards
Tomasz
Bookmarks