QEvent:: ShortcutOverride :
QEvent:: ShortcutOverride . ignore() . , .
, - , . :
Qt lineEdit Ctrl + V ( lineEdit).
:
1. , (return true) ( MainWindow::eventFilter , ). , Qt docs accept()/ignore(), , , true/false.
2. p.1 , , .
3. Ctrl + V . "Hello from window shortcut!" - (Ctrl + V) lineEdit.
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->installEventFilter(this);
}
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if (event->type() == QEvent::ShortcutOverride) {
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->modifiers().testFlag(Qt::ControlModifier) && keyEvent->key() == 'V') {
qDebug() << "Ignoring" << keyEvent->modifiers() << "+" << (char)keyEvent->key() << "for" << watched;
event->ignore();
return true;
}
}
return QMainWindow::eventFilter(watched, event);
}
void MainWindow::on_action1_triggered()
{
qDebug() << "Hello from window shortcut!";
}
:
QFlags (ControlModifier) + V QLineEdit (0x575b10, name = "lineEdit" )
!
. , , .
:. - .
Ctrl-Z ( Undo in edit) Ctrl-V ( ):
- Ctrl-Z Ctrl-V:
- QLineEdit QKeyEvent (ShortcutOverride, Key_Control, ControlModifier)
- QLineEdit QKeyEvent (KeyPress, Key_Control, ControlModifier)
- MainWindow QKeyEvent (KeyPress, Key_Control, ControlModifier)
- QLineEdit QKeyEvent (ShortcutOverride, Key_Z, ControlModifier)
II - ...
Ctrl-Z - lineEdit Ctrl + Z KeyPress, :
QLineEdit QKeyEvent (KeyPress, Key_Z, ControlModifier)
MainWindow , Ctrl + Z , QLineEdit
Ctrl-V - MainWindow Ctrl + V ShortcutOverride, QLineEdit:
III - Ctrl-Z Ctrl-V - :
- QLineEdit QKeyEvent (KeyRelease, Key_Z, ControlModifier)
- MainWindow QKeyEvent (KeyRelease, Key_Z, ControlModifier)
- QLineEdit QKeyEvent (KeyRelease, Key_Control)
- MainWindow QKeyEvent (KeyRelease, Key_Control)
P.S. , , , :)