我正在添加一堆 QAction
s 到我的主窗口的菜单。这些操作也可以由键盘触发,我希望快捷方式在菜单中可见,像往常一样,例如
-----------------
|Copy Ctrl+C|
-----------------
我可以使用
QAction.setShortcut()
来做到这一点.然而,我不要想要这些QAction
s 由快捷键触发;我正在其他地方分别处理所有键盘输入。这可能吗?我可以禁用 QAction 中的快捷方式,但我的菜单中仍然有快捷方式文本(在本例中为 Ctrl + C)吗?
编辑 :我最终这样做的方式是连接到菜单的
aboutToShow()
和 aboutToHide()
事件,并启用/禁用快捷方式,以便它们仅在显示菜单时处于事件状态。但我希望有一个更清洁的解决方案......
最佳答案
您可以从 QAction 继承并覆盖 QAction::event(QEvent*):
class TriggerlessShortcutAction : public QAction
{
public:
...ctors...
protected:
virtual bool event(QEvent* e)
{
if (e->type() == QEvent::Shortcut)
return true;
else
return QAction::event(e);
}
};
这将导致发送到您的操作的 QEvent::Shortcut 类型的任何事件都不会触发 'triggered()' 信号。
关于qt - 在 Qt 中,如何在菜单中显示键盘快捷键但禁用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1894395/