【问题标题】:How to Detect Alt+Enter pressed in QT如何检测 QT 中按下的 Alt+Enter
【发布时间】:2017-07-24 17:55:04
【问题描述】:

我有 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);
}

}

【问题讨论】:

    标签: qt qt4


    【解决方案1】:

    你为什么不用keyPressEvent

    你需要这样的东西。使用事件的 modifiers() 方法。

    void myClass::keyPressEvent(QKeyEvent *e)
    {
      if ((e->key()==Qt::Key_Return) && (e->modifiers()==Qt::AltModifier))
            doSomething();
    }
    

    【讨论】:

    • 我已经尝试了这个,但我没有得到任何输出......这是我的代码.. void MainWindow::keyPressEvent(QKeyEvent *event){ if ((event->key()== Qt::Key_U)){ qDebug()接受(); }
    • 另外,如果需要检测AltGr,也可以使用(e-&gt;modifiers()==(Qt::ControlModifier|Qt::AltModifier))。请注意,ALT+CTRL 也会被检测到。
    • 当我为 Linux 构建时,无论我使用 event->modifiers() 还是 QApplication::keyboardModifiers(),我都没有得到 AltModifier。当我为 Mac OS X 构建时,它工作得很好。Qt 5.6,以防它有所作为。
    猜你喜欢
    • 2021-09-23
    • 2013-05-20
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    相关资源
    最近更新 更多