即使没有焦点也希望收到活动

时间:2012-07-24 13:42:31

标签: c++ qt qt-creator

我在QGraphicView中有一个QGraphicsScene。 我希望它能够接收我的键盘事件,即使我没有按下屏幕。 因为如果我点击屏幕上任意一个键,我需要做另一个动作,但现在我需要先点击,所以我需要捕捉事件,即使我不关注QGraphicsScene。 我试图将事件放在MainWindow上,但它不起作用。

我得到了这样的事件:

void AreaScene::keyPressEvent(QKeyEvent *event){
    if(event->key()==Qt::Key_Control){
        MapData::controlPress=true;
    }
}
void AreaScene::keyReleaseEvent(QKeyEvent *event){
    if(event->key()==Qt::Key_Control){
            MapData::controlPress=false;
            this->renderArea=false;
    }
}

2 个答案:

答案 0 :(得分:1)

在QGraphicView子类的构造函数中:

`installEventFilter(this)`

在课堂上实现这个功能:

bool eventFilter(QObject*, QEvent* e);

在这个函数中你应该编写像

这样的代码
switch(e->type())
{
...
case QEvent::NonClientAreaMouseButtonPress:
{
...
}
case QEvent::NonClientAreaMouseButtonRelease:
{
...
}
}

答案 1 :(得分:0)

解决。

我在MainWindow上实现了它 注意:如果实现了事件方法,窗口不会调用此方法。