【问题标题】:Keyboard shortcuts - function keys - created in Qt app don't work on OSX键盘快捷键 - 功能键 - 在 Qt 应用程序中创建的不适用于 OSX
【发布时间】:2014-11-09 05:38:15
【问题描述】:

我有一个在主菜单中使用某些快捷方式的程序。它适用于 Windows 和 Linux。移植到 mac 时,某些快捷方式不起作用。

菜单是使用 QT Designer 创建的。看起来是这样的

QAction *actDelete;
actDelete = new QAction(MainWindow);
actDelete->setObjectName(QString::fromUtf8("actDelete"));
menu_Edit->addAction(actDelete);
actDelete->setText(QApplication::translate("MainWindow", "Delete", 0, QApplication::UnicodeUTF8));
actDelete->setShortcut(QApplication::translate("MainWindow", "Del", 0, QApplication::UnicodeUTF8));


QAction *act1;
act1 = new QAction(MainWindow);
act1->setObjectName(QString::fromUtf8("act1"));
menu1->addAction(act1);
act1->setText(QApplication::translate("MainWindow", "Action 1", 0, QApplication::UnicodeUTF8));
act1->setShortcut(QApplication::translate("MainWindow", "F12", 0, QApplication::UnicodeUTF8));

唯一不起作用的键是功能键和 Delete(对于 Delete,原因可能是 Mac 已将它替换为技术上是退格键的键......但它仍然被称为 Delete 所以它应该可以工作?)

其他组合键有效...功能键分配给其他功能似乎...

似乎不可能通过代码删除功能键的默认功能(真的吗?) - 所以我去点击按钮“启用”使用所有 F1、F2 等键作为标准功能钥匙。”'。此时我可以按下功能键并查看它们生成的代码(如key=0x100003B 用于ctrl + F12cmd + F12)。

在主窗口构造函数中,实例化ui后,我尝试了

#if defined Q_OS_MACX
m_ui->act1->setShortcut(tr("CTRL+F12")); // still nothing happening
m_ui->act1->setShortcut(Qt::CTRL+Qt::Key_F12);  // same, no effect on mac (though if i put it for windows the ctrl+F12 does have the desired effect
#endif

Qt 版本 4.7-4.8,使用 g++ 构建的 OSX 10.6.8

【问题讨论】:

  • F11 和 F12 由操作系统默认使用(尽管用户可以取消绑定)。不过,不知道删除。
  • 刚刚更新 - 在 mac 上进行测试后,我可以看到默认的 mac 操作正在发生。但是开发人员必须有一种方法来重新定义这些操作?

标签: macos qt menu shortcut


【解决方案1】:

为 Mac 添加了快捷键的定义

#if defined (Q_OS_MACX)
    m_ui->act1->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_F12));
#endif

为 Mac 添加了 Backspace 而不是 Delete。

【讨论】:

    最近更新 更多