2013-11-27 136 views
0

这里是我的代码:的QMainWindow :: keyReleaseEvent不能按预期工作

.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。我想念什么?

+0

您是否尝试过调试,以确保你没有进入这个方法(在设置一个破发点?函数的第一行) –

+0

你的表单中有MainMenu吗?它会影响行为。 – deepmax

+0

@VahidNateghi我试过了,它从来没有进入该方法。 –

回答

0

我觉得你应该先启用鼠标事件,在您的建筑功能添加setMouseTracking(true);,就像这样:

MyMainWindow::MyMainWindow(QWidget *parent) : QMainWindow(parent) 
{ 
    setMouseTracking(true); 
} 
+0

鼠标跟踪如何与此相关?无论如何,我试图添加它,但没有任何改变。 –

+0

对不起。我犯了一个错误。 – hahaya