【问题标题】:QAction as keyboard shortcut on QGraphicsItemQAction 作为 QGraphicsItem 上的键盘快捷键
【发布时间】:2019-10-08 01:07:51
【问题描述】:

我想为我的 QGraphicsScene 实现键盘快捷键。我的图形对象是从 QGraphicItem 和 QObject 派生的,所以我可以使用信号/槽连接。

我已经将 QActions 用于上下文菜单,现在我想将一些 QActions 也用作所选项目的键盘快捷键操作。

我的 QGraphicsItems 通过setFlag(); 启用了ItemIsFocusableItemIsSelectable

我可以收到keyPressEvent(QKeyEvent* event),但在这种情况下,我必须手动测试event->key() == Qt::Key_xxx

有什么方法可以自动执行此操作吗?

  • 我尝试将 QKeyEvent 与 QKeySequence 进行比较,但这不起作用(因为序列可以包含多个键)。

感谢您的帮助

【问题讨论】:

    标签: qt qgraphicsview qgraphicsscene qgraphicsitem


    【解决方案1】:

    我不完全确定您所说的自动是什么意思。我假设您只是想避免手动检查密钥,不幸的是我不确定是否有任何更简单的方法。

    像你正在做的那样抓住QKeyEvent* event 通常是要走的路,是的,不幸的是,一旦你举办了活动,你需要确保它是预期的。您可以通过使用位掩码或类似的逻辑操作使代码不那么难看,但总的来说,我在event->key() 上使用了switch,这往往会保持可读性。

    【讨论】:

    • 你如何处理 QKeySequence 提供的多键盘快捷键?我希望看到某种处理程序(在场景/父小部件中),我可以将 QAction 的 QKeySquence 与从用户输入接收的 QKeySequence 进行比较。
    • 啊,对不起,我错过了你试图捕获 QKeySequence,而不仅仅是 QKeyEvent。方法类似,但您需要在条件中检查 QEvent::ShortcutOverride。请参阅以下交流以获取更多信息,希望这对您有所帮助:forum.qt.io/topic/34583/…
    猜你喜欢
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多