QMainWindow::keyReleaseEvent 未按预期工作

Posted

技术标签:

【中文标题】QMainWindow::keyReleaseEvent 未按预期工作【英文标题】:QMainWindow::keyReleaseEvent is not working as expected 【发布时间】:2013-11-27 08:31:54 【问题描述】:

这是我的代码:

.h 文件

class MyMainWindow : public QMainWindow

    ...
protected:
    virtual void keyPressEvent(QKeyEvent *event);
    virtual void keyReleaseEvent(QKeyEvent *event);
private:
    bool _altKeyDown;
    ...

.cpp 文件

void MyMainWindow::keyPressEvent(QKeyEvent *event) 
    if(event->key() == Qt::Key_Alt) 
        _altKeyDown = true;
    


void MyMainWindow::keyReleaseEvent(QKeyEvent *event) 
    if(getenv("DEBUG_MODE")) qDebug() << "keyReleaseEvent fired";
    if(event->key() == Qt::Key_Alt) 
        _altKeyDown = false;
    

每次按键都会调用keyPressEvent函数,但是当我松开按键时,keyReleaseEvent不会被调用。我错过了什么吗?

【问题讨论】:

你试过调试器确定你没有进入这个方法吗?(在函数的第一行设置断点) 您的表单中有 MainMenu 吗?它会影响行为。 @VahidNateghi 我试过了,它从来没有进入方法。 @MM。我不确定你的意思是什么? @MahmoudHassan:如果你在表单中放了一个MainMenu,那么ALT键的行为就会改变,不能被捕获。 【参考方案1】:

我认为你应该先启用鼠标事件,在你的构造函数中添加setMouseTracking(true);,像这样:

MyMainWindow::MyMainWindow(QWidget *parent) : QMainWindow(parent)

    setMouseTracking(true);

【讨论】:

鼠标跟踪与此有何关系?无论如何,我尝试添加它,但没有任何改变。 对不起,我弄错了。

以上是关于QMainWindow::keyReleaseEvent 未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章