我使用Qt Creator创建了一个GUI。这是通过拖放小部件。现在我想为所有按钮分配快捷键。这里的任何人都可以告诉我怎么做吗?提前谢谢。
答案 0 :(得分:42)
您的按钮可能有一个连接到clicked()
信号的插槽。
要添加快捷键,只需将快捷键的activated()
信号连接到同一插槽即可。
在您的代码#include <QShortcut>
中,然后您就可以为这样的插槽添加快捷键:
QShortcut *shortcut = new QShortcut(QKeySequence("Ctrl+O"), parent);
QObject::connect(shortcut, SIGNAL(activated()), receiver, SLOT(yourSlotHere()));
如果parent是您的快捷方式的父级(例如主窗口),yourSlotHere()
是您希望快捷方式调用的插槽的名称,receiver
是yourSlotHere()
的对象是的。
将"Ctrl+O"
替换为您要分配的任何快捷方式。
您还可以在QShortcut的文档页面上找到更多信息。
答案 1 :(得分:14)
或者,如果快捷键对应于按钮文本中的某些字符,则可以预先设置&amp;那个角色。如果你想要文字&amp;,请使用&amp;&amp;。
答案 2 :(得分:3)
今天(Qt5.7),我们可以使用快捷方式属性直接在Qt Designer中指定快捷方式:
非常方便..即使有点马车:我必须&#34;验证&#34;在切换到另一个小部件之前单击同一小部件的另一个属性的快捷方式!
但它有效。
答案 3 :(得分:1)
从良好的UI / UX角度来看,您实际想要的不只是触发与按钮触发器相同的插槽(这是公认的答案所建议的解决方案),而且您还想在视觉上为按钮按下以确保用户可以清楚地看到触发的动作。以下是我用于“确认” QPushButtons
的示例。
// I have this function in my 'utils' module.
void bindShortcut(QAbstractButton *button, const QKeySequence &shortcut)
{
QObject::connect(new QShortcut(shortcut, button), &QShortcut::activated, [button](){ button->animateClick(); });
}
// and then I use it like this
auto *confirmButton = new QPushButton(tr("Confirm"));
connect(confirmButton, &QPushButton::clicked, ... some slot of yours to do the actual work);
bindShortcut(confirmButton, Qt::Key_Enter);
bindShortcut(confirmButton, Qt::Key_Return);
如果您不使用QtDesigner,这是最好的答案。否则,您可以根据另一个答案的建议,轻松地在设计器中设置快捷方式。