0

我在 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;
    }
}
4

2 回答 2

1

在 QGraphicView 子类的构造函数中:

`installEventFilter(this)`

并在课堂上实现这个功能:

bool eventFilter(QObject*, QEvent* e);

在这个函数中,你应该编写类似的代码

switch(e->type())
{
...
case QEvent::NonClientAreaMouseButtonPress:
{
...
}
case QEvent::NonClientAreaMouseButtonRelease:
{
...
}
}
于 2012-07-26T09:43:16.347 回答
0

解决了。

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

于 2012-07-24T14:07:17.200 回答