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 に答える