Qt(c++) 带按钮的键绑定(用于我的开发应用程序)
Qt(c++) Keybinding with button(for my developing application)
我想为我在 Qt 平台上开发的应用程序编写一个与键绑定一起使用的函数,但我找不到任何适合我的示例,比如我从 discord 应用程序添加的图片,你能帮帮我吗?
Discord keybinding
你的问题有点模糊,有几个方面与键绑定有关。
- 在应用程序启动时,您可以为操作和菜单分配默认快捷键,请参阅
QAction
、QShortcut
、QMenu
. 上的文档
- 如果您需要一个允许更改键绑定的对话框,您可以轻松地自己创建一个对话框。请参阅有关
QKeySequenceEdit
的文档,它可以帮助您为操作输入新的快捷键序列。
- 最后但同样重要的是,您需要将修改后的键序列绑定到您的操作。您可以通过从 QAction 派生一个 class 来做到这一点。通过使用
mainWindow->findChildren<YourActionClass*>()
搜索所有对象来查找这些操作
并使用对话框中的结果修改键盘快捷键。
此派生 class 还可以存储默认绑定、图标(您的用户可能喜欢修改图标)等。
这一切都非常简单。
如果您希望用户点击组合键进行选择,那么只需创建一个 class 继承 QLinEdit
(甚至 QLabel
也可以)并覆盖 keyPressEvent,
void QLineEdit::keyPressEvent(QKeyEvent *event);
然后使用 QKeyEvent
s 函数获取键和修饰符(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);
我想为我在 Qt 平台上开发的应用程序编写一个与键绑定一起使用的函数,但我找不到任何适合我的示例,比如我从 discord 应用程序添加的图片,你能帮帮我吗?
Discord keybinding
你的问题有点模糊,有几个方面与键绑定有关。
- 在应用程序启动时,您可以为操作和菜单分配默认快捷键,请参阅
QAction
、QShortcut
、QMenu
. 上的文档
- 如果您需要一个允许更改键绑定的对话框,您可以轻松地自己创建一个对话框。请参阅有关
QKeySequenceEdit
的文档,它可以帮助您为操作输入新的快捷键序列。 - 最后但同样重要的是,您需要将修改后的键序列绑定到您的操作。您可以通过从 QAction 派生一个 class 来做到这一点。通过使用
mainWindow->findChildren<YourActionClass*>()
搜索所有对象来查找这些操作 并使用对话框中的结果修改键盘快捷键。 此派生 class 还可以存储默认绑定、图标(您的用户可能喜欢修改图标)等。
这一切都非常简单。
如果您希望用户点击组合键进行选择,那么只需创建一个 class 继承 QLinEdit
(甚至 QLabel
也可以)并覆盖 keyPressEvent,
void QLineEdit::keyPressEvent(QKeyEvent *event);
然后使用 QKeyEvent
s 函数获取键和修饰符(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);