c++ - 即使没有焦点也想接收事件

标签 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;
    }
}

最佳答案

在您的 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/

相关文章:

c++ - 使用 valuePtr() 等为 Eigen3 SparseMatrix 分配空间

c++ - 在 stackoverflow 上应该阅读哪些问题? (关于 C++)

c++ - Lambda 函数作为基类

multithreading - 从 QRunnable 发出信号或发布事件

c++ - Boost Spirit 调试输出不出现

c++ - 在 UnitTesting (cppunit) 中使用另一个文件中定义的结构时出错

c++ - 更新一个 QTableView

c++ - QT 应用程序因 QStringList 指针而崩溃

QtCreator 没有设置调试器 (Windows)

c++ - 无法在另一个 Linux 系统上运行可执行二进制文件?