Qt(c++) 带按钮的键绑定(用于我的开发应用程序)

Qt(c++) Keybinding with button(for my developing application)

我想为我在 Qt 平台上开发的应用程序编写一个与键绑定一起使用的函数,但我找不到任何适合我的示例,比如我从 discord 应用程序添加的图片,你能帮帮我吗?

Discord keybinding

你的问题有点模糊,有几个方面与键绑定有关。

  1. 在应用程序启动时,您可以为操作和菜单分配默认快捷键,请参阅 QActionQShortcutQMenu.
  2. 上的文档
  3. 如果您需要一个允许更改键绑定的对话框,您可以轻松地自己创建一个对话框。请参阅有关 QKeySequenceEdit 的文档,它可以帮助您为操作输入新的快捷键序列。
  4. 最后但同样重要的是,您需要将修改后的键序列绑定到您的操作。您可以通过从 QAction 派生一个 class 来做到这一点。通过使用 mainWindow->findChildren<YourActionClass*>() 搜索所有对象来查找这些操作 并使用对话框中的结果修改键盘快捷键。 此派生 class 还可以存储默认绑定、图标(您的用户可能喜欢修改图标)等。

这一切都非常简单。

如果您希望用户点击组合键进行选择,那么只需创建一个 class 继承 QLinEdit(甚至 QLabel 也可以)并覆盖 keyPressEvent, void QLineEdit::keyPressEvent(QKeyEvent *event); 然后使用 QKeyEvents 函数获取键和修饰符(shift、ctrl 等)。只需阅读有关它的 Qt 文档。根据键和修饰符,写修饰符名称 + 键的文本(例如 Ctrl + N)。

要保持​​操作 (QAction),只需使用 std::map<QString,QAction*>QMap<QString,QAction*> 和 register/add 您在地图中的 QAction 对象并假设您的 class' name is MyClass and it has getKeyString() , to return key combination as QString, then you will just do,

QString str = MyClassObj.getKeyString();
QKeySequence ks(str);
actionMap.at("NewFile")->setShortcut(ks);