gpt4 book ai didi

c++ - 显示 QT 上下文菜单时没有 keyReleaseEvent

转载 作者:行者123 更新时间:2023-11-30 02:04:45 24 4
gpt4 key购买 nike

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

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

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

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

我使用的是 QT 4.8 (C++),并在 Windows 和 Linux 上进行了测试,结果相同。

最佳答案

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

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。

关于c++ - 显示 QT 上下文菜单时没有 keyReleaseEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10237482/

24 4 0