【问题标题】:Qt(c++) Keybinding with button(for my developing application)Qt(c++) 按键绑定(用于我的开发应用程序)
【发布时间】:2022-01-21 16:06:18
【问题描述】:

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

Discord keybinding

【问题讨论】:

  • 你可以看看这个:doc.qt.io/qt-5/qshortcut.html
  • 我不想将它分配给一个键,我希望人们选择他们想要的键。感谢您的反馈,但我想我检查了更多关于它的页面。

标签: c++ qt qt5 keyboard-shortcuts key-bindings


【解决方案1】:

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

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

这一切都很简单。

【讨论】:

  • 感谢您的反馈,如果您有任何关于它的示例,可以与我分享吗?
【解决方案2】:

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

要保持动作 (QAction),只需使用 std::map<QString,QAction*>QMap<QString,QAction*> 并在地图中注册/添加您的 QAction 对象,并假设您的班级名称是 MyClass 并且它有 getKeyString() ,将组合键返回为QString,然后就可以了,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    相关资源
    最近更新 更多