设置伙伴(buddy)
在用户界面开发中,为控件设置快捷键是一种提高用户操作效率的重要手段。在 Qt 中,通过 QLabel 和它的 伙伴机制(Buddy Mechanism),我们可以快速实现键盘快捷操作,让用户通过键盘轻松聚焦到某个控件上。本文将详细讲解 Qt 中伙伴设置的原理和实现。
什么是伙伴机制?
伙伴机制 是 Qt 提供的一种功能,允许开发者通过标签(QLabel
)为某个控件(如 QLineEdit
)设置一个快捷键(通常是 Alt+字母
的组合)。当用户按下快捷键时,焦点会自动切换到标签绑定的控件。
- 关键点
- 加速键(Accelerator Key):通过
&
定义快捷键,比如&Name
中的N
是加速键。 - 设置伙伴(Buddy):通过
QLabel::setBuddy(QWidget *widget)
方法将QLabel
与目标控件绑定。
如何实现?
通过 Qt 设计师界面
编辑伙伴(Buddy)是位于 Qt 设计师界面中的一个工具。设置完成后如图所示:
具体步骤:
- 拖入相应控件,并设置 QLabel 加速键,例如第一个 QLabel,text 设置为"&Button"
- 点击界面上的"编辑伙伴"按钮进入编辑状态,长按鼠标左键,拖动使 QLabel 与其相应控件形成伙伴关系,会出现箭头
- F3 保存,退出编辑伙伴模式(要是想删除个别关系,可点击连接线,右键删除)
通过代码
示例代码
#include <QWidget>
#include <QGridLayout>
#include <QLabel>
#include <QPushButton>
#include <QCheckBox>
#include <QLineEdit>
#include <QSpinBox>
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr)
: QWidget(parent)
{
setWindowTitle("编辑伙伴(Buddy)");
// 创建布局
auto gridLayout = new QGridLayout;
// 创建部件
label = new QLabel("&Button:");
pushButton = new QPushButton("PushButton");
label->setBuddy(pushButton); // 设置伙伴关系
label_2 = new QLabel("C&heckBox:");
checkBox = new QCheckBox("CheckBox");
label_2->setBuddy(checkBox); // 设置伙伴关系
label_3 = new QLabel(QStringLiteral("输入框(&L):"));
lineEdit = new QLineEdit;
label_3->setBuddy(lineEdit); // 设置伙伴关系
label_4 = new QLabel(QStringLiteral("数字输入(&N):"));
spinBox = new QSpinBox;
label_4->setBuddy(spinBox); // 设置伙伴关系
// 添加部件到布局
gridLayout->addWidget(label, 0, 0);
gridLayout->addWidget(pushButton, 0, 1);
gridLayout->addWidget(label_2, 1, 0);
gridLayout->addWidget(checkBox, 1, 1);
gridLayout->addWidget(label_3, 2, 0);
gridLayout->addWidget(lineEdit, 2, 1);
gridLayout->addWidget(label_4, 3, 0);
gridLayout->addWidget(spinBox, 3, 1);
// 设置布局到窗口
setLayout(gridLayout);
}
private:
QLabel *label;
QPushButton *pushButton;
QLabel *label_2;
QCheckBox *checkBox;
QLabel *label_3;
QLineEdit *lineEdit;
QLabel *label_4;
QSpinBox *spinBox;
};
界面展示
可以使用加速键 Alt+B,快速切换到 PushButton,Alt+h 快速切换到CheckBox等~