[Solved] QPlainTextEdit: Funny problem in intercepting Ctrl-F
-
wrote on 27 Jan 2016, 11:06 last edited by Harry123
I might be doing something wrong, but I cannot manage to intercept Ctrl-F from a sub-classed QPlainTextEdit.
What I have tried :
- Check for it in both keyPressEvent() and event(), where my code looks like
if (pevent->key() == Qt::Key_F && (pevent->modifiers() & Qt::ControlModifier)) - Added it as a menu item with Ctrl-F as the shortcut : the menu item works fine but not Ctrl-F
- Added a check in the same way for Ctrl-A : this works perfectly
- Check (just in case it was renamed) for the keys Qt::Key_Search and Qt::Key_Find : no go
Is my check wrong in any way?
Does QPlainTextEdit swallow this key combination ? Or QMainWindow in which it is embedded?
Failing all else, is there any other way to detect Ctrl-F ? - Check for it in both keyPressEvent() and event(), where my code looks like
-
wrote on 27 Jan 2016, 12:02 last edited by
Maybe Ctrl+F is a global shortcut of your desktop environment?
-
I might be doing something wrong, but I cannot manage to intercept Ctrl-F from a sub-classed QPlainTextEdit.
What I have tried :
- Check for it in both keyPressEvent() and event(), where my code looks like
if (pevent->key() == Qt::Key_F && (pevent->modifiers() & Qt::ControlModifier)) - Added it as a menu item with Ctrl-F as the shortcut : the menu item works fine but not Ctrl-F
- Added a check in the same way for Ctrl-A : this works perfectly
- Check (just in case it was renamed) for the keys Qt::Key_Search and Qt::Key_Find : no go
Is my check wrong in any way?
Does QPlainTextEdit swallow this key combination ? Or QMainWindow in which it is embedded?
Failing all else, is there any other way to detect Ctrl-F ?@Harry123
since you are also using it as a shortcur in the menu you might probably also check for a QEvent::ShortcutOverride event.bool MyPlainTextEdit::event(QEvent* e) { switch( e->type() ) { case QEvent::KeyPress: case QEvent::ShortcutOverride: { QKeyEvent* ke = static_cast<QKeyEvent*>( e ); // ... if( /* ke == Ctrl+F */ ) { e->accept(); return true; } } } return QPlainTextEdit::event( e ); }
The menu item's shortcurt is supposed to do the a different action than the in the text edit right?
If so you can simply set the same QShortcut (taken from the menu item's QAction) and set it on the widget. - Check for it in both keyPressEvent() and event(), where my code looks like
-
Maybe Ctrl+F is a global shortcut of your desktop environment?
wrote on 27 Jan 2016, 12:41 last edited by@Wieland Ctrl-F works in other programs than Qt.
-
@Harry123
since you are also using it as a shortcur in the menu you might probably also check for a QEvent::ShortcutOverride event.bool MyPlainTextEdit::event(QEvent* e) { switch( e->type() ) { case QEvent::KeyPress: case QEvent::ShortcutOverride: { QKeyEvent* ke = static_cast<QKeyEvent*>( e ); // ... if( /* ke == Ctrl+F */ ) { e->accept(); return true; } } } return QPlainTextEdit::event( e ); }
The menu item's shortcurt is supposed to do the a different action than the in the text edit right?
If so you can simply set the same QShortcut (taken from the menu item's QAction) and set it on the widget.wrote on 27 Jan 2016, 12:51 last edited by@raven-worx
This is not the case, but your comment started me digging everywhere in this rather large program, and I found the same shortcut defined elsewhere. Many thanks.Problem solved - programmer error.
1/5