我在 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;
}
}
最佳答案
在您的 QGraphicView 子类的构造函数中:
`installEventFilter(this)`
并在类中实现这个功能:
bool eventFilter(QObject*, QEvent* e);
在这个函数中你应该编写类似的代码
switch(e->type())
{
...
case QEvent::NonClientAreaMouseButtonPress:
{
...
}
case QEvent::NonClientAreaMouseButtonRelease:
{
...
}
}
关于c++ - 即使没有焦点也想接收事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632171/