2012-07-24 54 views
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; 
    } 
} 

回答

0

解決。

我在MainWindow上實現它 注意:如果實現了事件方法,窗口不會調用此方法。

1

在QGraphicView子類的構造函數:

`installEventFilter(this)` 

和實現這個功能類:

bool eventFilter(QObject*, QEvent* e); 

在此功能,您應該在代碼類似

switch(e->type()) 
{ 
... 
case QEvent::NonClientAreaMouseButtonPress: 
{ 
... 
} 
case QEvent::NonClientAreaMouseButtonRelease: 
{ 
... 
} 
}