/* * Copyright (C) 2020-2022 Roy Qu (royqh1979@gmail.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "shortcutinputedit.h" #include #include #include #include ShortcutInputEdit::ShortcutInputEdit(QWidget* parent):QLineEdit(parent) { QList acts = actions(); // foreach (const QAction* action, acts) { // qDebug()<shortcut()[0]; // } } void ShortcutInputEdit::keyPressEvent(QKeyEvent *event) { QString lastKeys=text(); if (event->key()==Qt::Key_Delete && event->modifiers()==Qt::NoModifier) { setText(""); } else if (event->key()==Qt::Key_Backspace && event->modifiers()==Qt::NoModifier) { setText(""); } else if (event->key()==Qt::Key_Control || event->key()==Qt::Key_Alt || event->key()==Qt::Key_Shift || event->key()==Qt::Key_Meta ) { //setText(""); return; } else if (event->modifiers()==Qt::ShiftModifier && !event->text().isEmpty() && event->text().at(0).unicode()>32 && event->text().at(0).unicode()<127){ //setText(""); return; } else if (event->modifiers()==Qt::NoModifier && !event->text().isEmpty() && event->text().at(0).unicode()>32 && event->text().at(0).unicode()<127){ //setText(""); return; } else { int key = event->key(); if (key==Qt::Key_Backtab) key = Qt::Key_Tab; QKeySequence seq(event->modifiers()|key); QString s=seq.toString(); if (event->modifiers().testFlag(Qt::ShiftModifier) && !event->text().isEmpty() && event->text().at(0).unicode()>32 && event->text().at(0).unicode()<127) { s = s.mid(0,s.lastIndexOf('+')+1) + event->text().at(0); } if (!lastKeys.isEmpty()) s=lastKeys+","+s; setText(s); // if (key!=Qt::Key_Tab // && key!=Qt::Key_Enter // && key!=Qt::Key_Return) // emit inputFinished(this); } event->accept(); } bool ShortcutInputEdit::event(QEvent *event) { if (event->type()==QEvent::ShortcutOverride) { QKeyEvent* keyEvent = static_cast(event); if (keyEvent->key()==Qt::Key_Tab) keyPressEvent((QKeyEvent*)event); event->accept(); return true; } else if (event->type()==QEvent::KeyPress) { keyPressEvent((QKeyEvent*)event); return true; } return QLineEdit::event(event); }