Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为按钮指定快捷键-Qt C++;_C++_Qt - Fatal编程技术网

C++ 为按钮指定快捷键-Qt C++;

C++ 为按钮指定快捷键-Qt C++;,c++,qt,C++,Qt,我已经使用Qt Creator创建了一个GUI。这是通过拖放小部件实现的。现在我想为所有按钮指定快捷键。这里有人能告诉我怎么做吗?提前谢谢。您的按钮可能有一个插槽连接到其clicked()信号 要添加快捷键,只需将快捷键的activated()信号连接到同一插槽即可 在您的代码中,#include,然后您将能够为如下插槽添加快捷键: QShortcut *shortcut = new QShortcut(QKeySequence("Ctrl+O"), parent); QObject::conn

我已经使用Qt Creator创建了一个GUI。这是通过拖放小部件实现的。现在我想为所有按钮指定快捷键。这里有人能告诉我怎么做吗?提前谢谢。

您的按钮可能有一个插槽连接到其
clicked()
信号

要添加快捷键,只需将快捷键的
activated()
信号连接到同一插槽即可

在您的代码中,
#include
,然后您将能够为如下插槽添加快捷键:

QShortcut *shortcut = new QShortcut(QKeySequence("Ctrl+O"), parent);
QObject::connect(shortcut, SIGNAL(activated()), receiver, SLOT(yourSlotHere()));
其中parent是快捷方式(例如主窗口)的父级,
yourSlotHere()
是要快捷方式调用的插槽的名称,
receiver
yourSlotHere()
所在的对象

“Ctrl+O”
替换为要指定的任何快捷方式


您还可以在文档页面上找到有关的详细信息。

或者,如果快捷键对应于按钮文本中的某个字符,您可以为该字符准备(&p)。如果您想要文字&,请立即使用&。

(Qt5.7),我们可以使用快捷方式属性在Qt Designer中直接指定快捷方式:

非常方便。。即使有点问题:在切换到另一个小部件之前,我必须通过单击同一小部件的另一个属性来“验证”快捷方式


但是它是有效的。

从良好的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,我认为这是最好的答案。否则,您可以像另一个答案所建议的那样轻松地在设计器中设置快捷键。

我们是不是泄漏了
快捷键
对象,还是因为我们指定了父对象而将其释放?如果要绑定到特殊键,请使用
QKeySequence(Qt::key\u Home)
或其他(
key\u Backspace
key\u Right
等)。