首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示QT上下文菜单时无keyReleaseEvent

问显示QT上下文菜单时无keyReleaseEvent
EN

Stack Overflow用户
提问于 2012-04-20 06:03:12
回答 2查看 1.1K关注 0票数 1

我正在使用QT4,并且我创建了一个QGLWidget,我想在其中实现一个右键单击上下文菜单。我希望仅当单击鼠标右键并按下CTRL键时才显示上下文菜单。

我尝试通过在按下Ctrl键时设置一个控制标志,然后在释放Ctrl键时清除它(通过keyReleaseEvent)来实现这一点。问题是,当上下文菜单打开时,我没有收到keyReleaseEvent (不仅仅是CTRL,根本没有按键释放)。

例如:我按住CTRL键,单击鼠标右键,然后出现上下文菜单(仍然按住CTRL键)。在没有选择菜单中的任何内容的情况下,我松开了CTRL键,但我的程序没有接收到keyPressEvent。因此,我的标志永远不会被清除,下一次用户右击时(即使没有按住控件),上下文菜单也会出现。

当出现上下文菜单时,为什么我没有收到keyPressEvent?

我使用的是Qt4.8 (C++),并在Windows和Linux上进行了测试,结果是一样的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-20 07:49:09

对于为什么,Qt将按键事件发送到具有键盘焦点或显式抓住键盘的小部件(使用QWidget::grabKeyBoard()),因为上下文菜单是您释放按键时的小部件,它接收按键释放事件。

票数 1
EN

Stack Overflow用户

发布于 2012-04-20 07:25:42

我认为处理这种情况的最好方法是在打开上下文菜单时检查是否按下了CTRL键。这样,您就可以避免这些问题,并且不必跟踪该标志。试试这个:

代码语言:javascript
复制
void DerivedClass::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::RightButton && event->modifiers().testFlag(Qt::ControlModifier))
    {
        // Open the context menu.
    }
    else
    {
        BaseClass::mousePressEvent(event);
    }
}

编辑:那是Qt::ControlModifier,不是Qt::CtrlModifier。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10237482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档