gpt4 book ai didi

c++ - Qt : open context menu on mouse press

转载 作者:行者123 更新时间:2023-11-30 04:33:40 25 4
gpt4 key购买 nike

我正在尝试更改上下文菜单的默认行为:我希望它在按下事件时打开,而不是在鼠标右键的释放事件上打开,并且它是在释放事件上触发的操作) .在一个小部件上,我可以重载 mousePressEvent() 并触发自定义上下文菜单事件,但我希望它对我程序的所有上下文菜单都是全局的...

有什么想法吗?

谢谢。

最佳答案

当我意识到将 ActionsContextMenu 策略与操作一起使用时,我试图在 QWidget 之上实现一个小部件,并使用自定义方式来处理上下文菜单以满足您的需求由小部件直接拥有的行为完全符合您的预期。 (Linux 上的 Qt 4.6.2 和 4.7,尚未在 Windows 上尝试过,但我不知道为什么行为会有所不同)。

这是您可以使用的策略吗?如果您真的不需要外部菜单,我建议您使用此解决方案。

否则,您将不得不使用自定义 QMenu 成员创建自己的小部件库。您应该使用 Qt::PreventContextMenu 策略来保证右键单击在小部件的 void mousePressEvent(QMouseEvent *event) 中结束。在此事件处理程序中,确保显示您的菜单。在您的菜单中重新实现 void mouseReleaseEvent( QMouseEvent *event) 如果它没有触发当前操作,请使用鼠标位置(在事件中)和 QAction 自行执行* actionAt(const QPoint & pt) const.但要注意 QMenuvoid mouseReleaseEvent( QMouseEvent *event) 已经从 QWidget 重新实现,并且可能会做一些你想做的事情保存!


编辑这有点令人难过,但这种行为似乎在 Windows 上设计是不同的 void QMenu::mouseReleaseEvent(QMouseEvent *e) 执行以下操作:

提取格式qmenu.cpp, Qt 4.6.2 sdk

#if defined(Q_WS_WIN)
//On Windows only context menus can be activated with the right button
if (e->button() == Qt::LeftButton || d->topCausedWidget() == 0)
#endif
d->activateAction(action, QAction::Trigger);

我不知道 topCausedWidget() 在生活中做了什么,但它有点明确,只有左键释放才会触发当前操作 ...

一个简单的解决方案是重新实现您的 QMenu 并将此行注释为 ...

关于c++ - Qt : open context menu on mouse press,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6621494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com