Как обнаружить нажатие Alt + Enter в QT - PullRequest
5 голосов
/ 09 июня 2011

У меня есть QTextEdit, и я хочу обнаружить, что нажата клавиша «Alt + Enter» (обе клавиши вместе).Я установил фильтр событий, чтобы обнаружить события нажатия клавиш, и когда нажата клавиша ввода, я могу обнаружить клавишу, но как определить, что клавиша «Alt» также нажата?

Я попытался вспомнить «Alt»."нажмите и отпустите клавишу (со статической переменной), но это не поможет, если пользователь отпустит клавишу Alt за пределами приложения.

см. прикрепленный мой код.

bool MTGridEditDelegate::eventFilter(QObject *obj,QEvent *event){
static bool pressed = false;
if(event->type() == QEvent::KeyPress)
{
    if(static_cast<QKeyEvent*>(event)->key() == Qt::Key_Alt)
    {
        pressed = true;
        qDebug("Alt Pressed");
    }
}
if(event->type() == QEvent::KeyRelease)
{
    if(static_cast<QKeyEvent*>(event)->key() == Qt::Key_Alt)
    {
        pressed = false;
        qDebug("Alt Released");
    }
}

if(event->type() == QEvent::KeyPress)
{
    int key = static_cast<QKeyEvent *>(event)->key();
    qDebug("The Key is : %d",key);
    switch (static_cast<QKeyEvent *>(event)->key()) 
    {
        case Qt::Key_Backtab:
            break;
        case Qt::Key_Tab:
        case Qt::Key_Enter:
        case Qt::Key_Return:
        {
            QWidget *editor = ::qobject_cast<QWidget*>(obj);
            if(!pressed)
            {
                emit commitData(editor);
                emit closeEditor(editor, NoHint);
            }
            else
            {
                MQTextEdit *editBox = qobject_cast<MQTextEdit *>(editor);
                if (editBox)
                {
                    QString text = editBox->toPlainText();
                    text = text + QChar('\n');
                    //text = text + QChar('\r');
                    editBox->setPlainText(text);
                }
            }
            break;
        }
        case Qt::Key_Escape:
    //      CustControlFocusLost();
            break;
        default:
            return false;

    }
    return true;
}
else
{
    return QObject::eventFilter(obj,event);
}

}

1 Ответ

17 голосов
/ 09 июня 2011

Почему бы вам не использовать keyPressEvent ?

Вам нужно что-то подобное.используйте модификаторы () метод события.

void myClass::keyPressEvent(QKeyEvent *e)
{
  if ((e->key()==Qt::Key_Return) && (e->modifiers()==Qt::AltModifier))
        doSomething();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...